Spec-Zone.ru › Django 1.11

Система проверки фреймворка

Система проверки фреймворка — это набор статических проверок для валидации проектов Django. Она обнаруживает распространённые проблемы и предлагает подсказки по их исправлению. Фреймворк расширяем, поэтому вы легко можете добавить свои собственные проверки.

Подробности о том, как добавить свои собственные проверки и интегрировать их с системами проверок Django, см. в руководстве по системе проверок.

Ссылка на API

CheckMessage

class CheckMessage(level, msg, hint=None, obj=None, id=None) [source]

Предупреждения и ошибки, генерируемые системами проверок, должны быть экземплярами CheckMessage. Экземпляр представляет собой отдельную ошибку или предупреждение для отчёта. Он также предоставляет контекст и подсказки, применимые к сообщению, и уникальный идентификатор, используемый для фильтрации.

Аргументы конструктора:

level
Уровень важности сообщения. Используйте одно из предопределённых значений: DEBUG, INFO, WARNING, ERROR, CRITICAL. Если уровень не меньше ERROR, Django не позволит выполнить команды управления. Сообщения с уровнем ниже ERROR (т.е. предупреждения) выводятся в консоль, но могут быть отключены.
msg
Короткая строка (менее 80 символов), описывающая проблему. Строка не должна содержать переводы строк.
hint
Строка в одну строку с подсказкой по исправлению проблемы. Если подсказку предоставить невозможно или она очевидна из сообщения об ошибке, подсказку можно опустить или использовать значение None.
obj
Необязательно. Объект, предоставляющий контекст для сообщения (например, модель, в которой была обнаружена проблема). Объект должен быть моделью, полем, менеджером или любым другим объектом, который определяет метод __str__ (в Python 2 необходимо определить метод __unicode__). Метод используется при отчёте обо всех сообщениях, и его результат предшествует сообщению.
id
Необязательная строка. Уникальный идентификатор проблемы. Идентификаторы должны соответствовать шаблону applabel.X001, где X — одна из букв CEWID, указывающая на уровень важности сообщения (C для критических, E для ошибок). Число может быть назначено приложением, но должно быть уникальным в пределах этого приложения.

Существуют подклассы для упрощения создания сообщений с общими уровнями. При их использовании вы можете опустить аргумент level, так как он подразумевается именем класса.

class Debug(msg, hint=None, obj=None, id=None) [source]
class Info(msg, hint=None, obj=None, id=None) [source]
class Warning(msg, hint=None obj=None, id=None) [source]
class Error(msg, hint=None, obj=None, id=None) [source]
class Critical(msg, hint=None, obj=None, id=None) [source]

Встроенные теги

Системные проверки Django организованы с использованием следующих тегов:

  • admin: Проверки любых объявлений административной панели.
  • caches: Проверки конфигурации кэша.
  • compatibility: Выделение потенциальных проблем с обновлением версии.
  • database: Проверки проблем с конфигурацией базы данных. Проверки баз данных не выполняются по умолчанию, так как они выполняют больше, чем статический анализ кода, как обычные проверки. Они выполняются только командой migrate или если вы укажете тег database при вызове команды check.
  • models: Проверки определений моделей, полей и менеджеров.
  • security: Проверки конфигурации безопасности.
  • signals: Проверки объявлений сигналов и регистрации обработчиков.
  • templates: Проверки конфигурации шаблонов.
  • urls: Проверки конфигурации URL.

Некоторые проверки могут быть зарегистрированы с несколькими тегами.

Основные проверки системы

Обратная совместимость

Следующие проверки предупреждают пользователя о потенциальных проблемах, которые могут возникнуть в результате обновления версии.

  • 1_6.W001: Некоторые модульные тесты проекта могут выполняться не так, как ожидается. Эта проверка была удалена в Django 1.8 из-за ложных срабатываний.
  • 1_6.W002: BooleanField не имеет значения по умолчанию. Эта проверка была удалена в Django 1.8 из-за ложных срабатываний.
  • 1_7.W001: Django 1.7 изменил глобальные значения по умолчанию для MIDDLEWARE_CLASSES. django.contrib.sessions.middleware.SessionMiddleware, django.contrib.auth.middleware.AuthenticationMiddleware, и django.contrib.messages.middleware.MessageMiddleware были удалены из значений по умолчанию. Если вашему проекту нужны эти middleware, вы должны настроить данное значение. Эта проверка была удалена в Django 1.9.
  • 1_8.W001: Самостоятельные настройки TEMPLATE_* устарели в Django 1.8, и словарь TEMPLATES имеет приоритет. Вы должны поместить значения следующих настроек в словарь TEMPLATES по умолчанию: TEMPLATE_DIRS, TEMPLATE_CONTEXT_PROCESSORS, TEMPLATE_DEBUG, TEMPLATE_LOADERS, TEMPLATE_STRING_IF_INVALID.
  • 1_10.W001: Настройка MIDDLEWARE_CLASSES устарела в Django 1.10, и настройка MIDDLEWARE имеет приоритет. Поскольку вы установили MIDDLEWARE, значение MIDDLEWARE_CLASSES игнорируется.

Кэши

Следующие проверки проверяют, что ваша настройка CACHES настроена правильно:

  • caches.E001: Вы должны определить кэш 'default' в настройке CACHES.

База данных

MySQL

Если вы используете MySQL, будут выполнены следующие проверки:

  • mysql.E001: MySQL не допускает уникальных CharField с max_length > 255.
  • mysql.W002: Режим жёсткой проверки MySQL не установлен для подключения к базе данных ‘<alias>’. См. также Настройка sql_mode.

Поля моделей

  • fields.E001: Имена полей не должны оканчиваться на нижнее подчёркивание.
  • fields.E002: Имена полей не должны содержать "__".
  • fields.E003: pk — зарезервированное слово, которое нельзя использовать в качестве имени поля.
  • fields.E004: choices должно быть итерируемым (например, списком или кортежем).
  • fields.E005: choices должно быть итерируемым, возвращающим кортежи (actual value, human readable name).
  • fields.E006: db_index должно быть None, True или False.
  • fields.E007: Первичные ключи не должны иметь null=True.
  • fields.E100: AutoField должны установить primary_key=True.
  • fields.E110: BooleanField не принимают значения null.
  • fields.E120: CharField должны определить атрибут max_length.
  • fields.E121: max_length должно быть положительным целым числом.
  • fields.W122: max_length игнорируется при использовании с IntegerField.
  • fields.E130: DecimalField должны определить атрибут decimal_places.
  • fields.E131: decimal_places должно быть неотрицательным целым числом.
  • fields.E132: DecimalField должны определить атрибут max_digits.
  • fields.E133: max_digits должно быть неотрицательным целым числом.
  • fields.E134: max_digits должно быть больше или равно decimal_places.
  • fields.E140: FilePathField должны иметь установленным либо allow_files, либо allow_folders в True.
  • fields.E150: GenericIPAddressField не могут принимать пустые значения, если null-значения запрещены, так как пустые значения хранятся как null.
  • fields.E160: Опции auto_now, auto_now_add, и default взаимоисключающие. Должна присутствовать только одна.
  • fields.W161: Предоставлено исправленное значение по умолчанию.
  • fields.E900: IPAddressField удален, кроме поддержки в исторических миграциях.
  • fields.W900: IPAddressField устарел. Поддержка будет удалена в Django 1.9 (кроме исторических миграций). Эта проверка появилась в Django 1.7 и 1.8.
  • fields.W901: CommaSeparatedIntegerField устарел. Поддержка будет удалена в Django 2.0 (кроме исторических миграций).

Файловые поля

  • fields.E200: unique не является допустимым аргументом для FileField. Эта проверка удалена в Django 1.11.
  • fields.E201: primary_key не является допустимым аргументом для FileField.
  • fields.E202: Аргумент upload_to для FileField должен быть относительным, а не абсолютным путем.
  • fields.E210: Нельзя использовать ImageField, так как Pillow не установлен.

Связанные поля

  • fields.E300: Поле определяет связь с моделью <model>, которая либо не установлена, либо является абстрактной.
  • fields.E301: Поле определяет связь с моделью <model>, которая была заменена.
  • fields.E302: Доступ к полю <field name> конфликтует с полем <field name>.
  • fields.E303: Имя обратного запроса для поля <field name> конфликтует с полем <field name>.
  • fields.E304: Имя поля <field name> конфликтует с доступом к <field name>.
  • fields.E305: Имя поля <field name> конфликтует с именем обратного запроса для <field name>.
  • fields.E306: Связанное имя должно быть допустимым идентификатором Python или заканчиваться на '+'.
  • fields.E307: Поле <app label>.<model>.<field name> было объявлено с отложенной ссылкой на <app label>.<model>, но приложение <app label> не установлено или не предоставляет модель <model>.
  • fields.E308: Имя обратного запроса <related query name> не должно оканчиваться на подчёркивание.
  • fields.E309: Имя обратного запроса <related query name> не должно содержать '__'.
  • fields.E310: Ни один поднабор полей <field1>, <field2>, … в модели <model> не является уникальным. Добавьте unique=True к любому из этих полей или добавьте хотя бы подмножество из них в ограничение unique_together.
  • fields.E311: <model> должно установить unique=True, так как на него ссылается ForeignKey.
  • fields.E312: Поле <field name> модели to_field не существует в связанной модели <app label>.<model>.
  • fields.E320: Поле указывает на on_delete=SET_NULL, но не может быть NULL.
  • fields.E321: Поле указывает на on_delete=SET_DEFAULT, но не имеет значения по умолчанию.
  • fields.E330: ManyToManyField не могут быть уникальными.
  • fields.E331: Поле указывает на много-ко-многие отношения через модель <model>, которая не установлена.
  • fields.E332: Поля много-ко-многие с промежуточными таблицами не должны быть симметричными.
  • fields.E333: Модель используется как промежуточная модель для <model>, но она имеет более двух внешних ключей к <model>, что неоднозначно. Вы должны указать, какие два внешних ключа Django должен использовать, через параметр through_fields.
  • fields.E334: Модель используется как промежуточная модель для <model>, но она имеет более одного внешнего ключа от <model>, что неоднозначно. Вы должны указать, какой внешний ключ Django должен использовать, через параметр through_fields.
  • fields.E335: Модель используется как промежуточная модель для <model>, но она имеет более одного внешнего ключа к <model>, что неоднозначно. Вы должны указать, какой внешний ключ Django должен использовать, через параметр through_fields.
  • fields.E336: Модель используется как промежуточная модель для <model>, но она не имеет внешних ключей к <model> или <model>.
  • fields.E337: Поле указывает на through_fields, но не предоставляет имена двух полей связи, которые должны использоваться для отношения через <model>.
  • fields.E338: Промежуточная модель <through model> не имеет поля <field name>.
  • fields.E339: <model>.<field name> не является внешним ключом к <model>.
  • fields.E340: Промежуточная таблица поля <table name> конфликтует с именем таблицы <model>/<model>.<field name>.
  • fields.W340: null не оказывает влияния на ManyToManyField.
  • fields.W341: ManyToManyField не поддерживает validators.
  • fields.W342: Установка unique=True на ForeignKey имеет тот же эффект, что и использование OneToOneField.
  • fields.W343: limit_choices_to не оказывает влияния на ManyToManyField с моделью through.

Модели

  • models.E001: <swappable> не имеет вида app_label.app_name.
  • models.E002: <SETTING> ссылается на <model>, которая либо не установлена, либо является абстрактной.
  • models.E003: Модель имеет два много-ко-многие отношения через промежуточную модель <app_label>.<model>.
  • models.E004: id может использоваться только в качестве имени поля, если поле также задаёт primary_key=True.
  • models.E005: Поле <field name> из родительской модели <model> конфликтует с полем <field name> из родительской модели <model>.
  • models.E006: Поле конфликтует с полем <field name> из модели <model>.
  • models.E007: Поле <field name> имеет имя столбца <column name>, которое используется другим полем.
  • models.E008: index_together должно быть списком или кортежем.
  • models.E009: Все элементы index_together должны быть списками или кортежами.
  • models.E010: unique_together должно быть списком или кортежем.
  • models.E011: Все элементы unique_together должны быть списками или кортежами.
  • models.E012: index_together/unique_together ссылается на несуществующее поле <field name>.
  • models.E013: index_together/unique_together ссылается на ManyToManyField <field name>, но ManyToManyField не поддерживаются для этого параметра.
  • models.E014: ordering должно быть кортежем или списком (даже если вы хотите сортировать только по одному полю).
  • models.E015: ordering ссылается на несуществующее поле <field name>.
  • models.E016: index_together/unique_together ссылается на поле <field_name>, которое не локально для модели <model>.
  • models.E017: Провайдер модели <model> содержит поля модели.
  • models.E018: Автоматически сгенерированное имя столбца слишком длинное для поля <field>. Максимальная длина составляет <maximum length> для базы данных <alias>.
  • models.E019: Автоматически сгенерированное имя столбца слишком длинное для поля M2M <M2M field>. Максимальная длина составляет <maximum length> для базы данных <alias>.
  • models.E020: Метод класса <model>.check() в настоящее время переопределен.
  • models.E021: ordering и order_with_respect_to не могут быть использованы вместе.
  • models.E022: <function> содержит отложенную ссылку на <app label>.<model>, но приложение <app label> не установлено или не предоставляет модель <model>.
  • models.E023: Имя модели <model> не может начинаться или заканчиваться подчёркиванием, так как это конфликтует с синтаксисом поиска запроса.
  • models.E024: Имя модели <model> не может содержать двойные подчёркивания, так как это конфликтует с синтаксисом поиска запроса.

Безопасность

Проверки безопасности не делают ваш сайт безопасным. Они не проверяют код, не выполняют обнаружение вторжений и не выполняют ничего особенно сложного. Вместо этого они помогают выполнить автоматическую проверку на простые ошибки, которые улучшат безопасность вашего сайта.

Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если вы перенаправляете HTTP на HTTPS в балансировщике нагрузки, постоянные предупреждения о том, что не включено SECURE_SSL_REDIRECT, будут раздражать. Используйте SILENCED_SYSTEM_CHECKS, чтобы отключить ненужные проверки.

Следующие проверки выполняются, если вы используете опцию check --deploy:

  • security.W001: У вас нет django.middleware.security.SecurityMiddleware в вашем MIDDLEWARE/MIDDLEWARE_CLASSES, поэтому настройки SECURE_HSTS_SECONDS, SECURE_CONTENT_TYPE_NOSNIFF, SECURE_BROWSER_XSS_FILTER и SECURE_SSL_REDIRECT не будут иметь никакого эффекта.
  • security.W002: У вас нет django.middleware.clickjacking.XFrameOptionsMiddleware в вашем MIDDLEWARE/MIDDLEWARE_CLASSES, поэтому ваши страницы не будут передаваться с заголовком 'x-frame-options'. Если для вашего сайта нет веских причин, по которым он должен передаваться в фрейме, следует включить этот заголовок, чтобы помочь предотвратить атаки clickjacking.
  • security.W003: Похоже, вы не используете встроенную защиту Django от поддельных межсайтовых запросов (CSRF) через middleware (django.middleware.csrf.CsrfViewMiddleware отсутствует в вашем MIDDLEWARE/MIDDLEWARE_CLASSES). Включение middleware — самый безопасный подход, чтобы убедиться, что вы не оставили уязвимостей.
  • security.W004: Вы не задали значение для настройки SECURE_HSTS_SECONDS. Если весь ваш сайт обслуживается только через SSL, вы можете рассмотреть возможность установки значения и включения HTTP Strict Transport Security. Сначала обязательно прочитайте документацию; небрежное включение HSTS может привести к серьезным и необратимым проблемам.
  • security.W005: Вы не установили настройку SECURE_HSTS_INCLUDE_SUBDOMAINS в значение True. Без этого ваш сайт потенциально уязвим к атакам через небезопасное подключение к доменному поддомену. Установите это значение в True только в том случае, если уверены, что все поддомены вашего домена должны обслуживаться исключительно через SSL.
  • security.W006: Настройка SECURE_CONTENT_TYPE_NOSNIFF не установлена в значение True, поэтому ваши страницы не будут передаваться с заголовком 'x-content-type-options: nosniff'. Следует рассмотреть возможность включения этого заголовка, чтобы предотвратить некорректное определение типов контента браузером.
  • security.W007: Настройка SECURE_BROWSER_XSS_FILTER не установлена в значение True, поэтому ваши страницы не будут передаваться с заголовком 'x-xss-protection: 1; mode=block'. Следует рассмотреть возможность включения этого заголовка, чтобы активировать фильтрацию XSS браузера и помочь предотвратить атаки XSS.
  • security.W008: Настройка SECURE_SSL_REDIRECT не установлена в значение True. Если ваш сайт должен быть доступен как через SSL, так и без него, вы можете установить это значение в True или настроить балансировщик нагрузки или прокси-сервер для перенаправления всех подключений на HTTPS.
  • security.W009: У вашей SECRET_KEY меньше 50 символов или меньше 5 уникальных символов. Пожалуйста, сгенерируйте длинный и случайный SECRET_KEY, иначе многие критически важные для безопасности функции Django будут уязвимы для атак.
  • security.W010: У вас есть django.contrib.sessions в вашем INSTALLED_APPS, но вы не установили SESSION_COOKIE_SECURE в значение True. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей сетевыми анализаторами.
  • security.W011: У вас есть django.contrib.sessions.middleware.SessionMiddleware в вашем MIDDLEWARE/MIDDLEWARE_CLASSES, но вы не установили SESSION_COOKIE_SECURE в значение True. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей сетевыми анализаторами.
  • security.W012: SESSION_COOKIE_SECURE не установлено в значение True. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей сетевыми анализаторами.
  • security.W013: У вас есть django.contrib.sessions в вашем INSTALLED_APPS, но вы не установили SESSION_COOKIE_HTTPONLY в значение True. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей атаками XSS.
  • security.W014: У вас есть django.contrib.sessions.middleware.SessionMiddleware в вашем MIDDLEWARE/MIDDLEWARE_CLASSES, но вы не установили SESSION_COOKIE_HTTPONLY в значение True. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей атаками XSS.
  • security.W015: SESSION_COOKIE_HTTPONLY не установлено в значение True. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей атаками XSS.
  • security.W016: CSRF_COOKIE_SECURE не установлено в значение True. Использование файла cookie CSRF только для защищённого соединения затрудняет перехват токена CSRF сетевыми анализаторами.
  • security.W017: CSRF_COOKIE_HTTPONLY не установлено в значение True. Использование файла cookie CSRF только для защищённого соединения затрудняет перехват токена CSRF атаками XSS. Эта проверка удалена в Django 1.11, поскольку настройка CSRF_COOKIE_HTTPONLY не имеет практической пользы.
  • security.W018: В развертывании не следует устанавливать DEBUG в значение True.
  • security.W019: У вас есть django.middleware.clickjacking.XFrameOptionsMiddleware в вашем MIDDLEWARE/MIDDLEWARE_CLASSES, но X_FRAME_OPTIONS не установлено в значение 'DENY'. По умолчанию значение 'SAMEORIGIN', но если нет веских причин для отображения других частей вашего сайта в фрейме, следует изменить его на 'DENY'.
  • security.W020: В развертывании ALLOWED_HOSTS не должно быть пустым.
  • security.W021: Вы не установили настройку SECURE_HSTS_PRELOAD в значение True. Без этого ваш сайт не может быть добавлен в список предварительной загрузки браузера.

Сигналы

  • signals.E001: <handler> был подключён к сигналу <signal> с ленической ссылкой на отправителя <app label>.<model>, но приложение <app label> не установлено или не предоставляет модель <model>.

Шаблоны

Следующие проверки гарантируют правильную конфигурацию настройки TEMPLATES:

  • templates.E001: У вас есть 'APP_DIRS': True в вашей настройке TEMPLATES, но вы также указали 'loaders' в OPTIONS. Удалите APP_DIRS или удалите опцию 'loaders'.
  • templates.E002: string_if_invalid в TEMPLATES OPTIONS должно быть строкой, но получено: {value} ({type}).

URL

Ниже приведены проверки, выполняемые для вашей конфигурации URL:

  • urls.W001: Ваш шаблон URL <pattern> использует include() с regex, заканчивающимся на $. Удалите знак доллара из regex, чтобы избежать проблем с включением URL-адресов.
  • urls.W002: Ваш шаблон URL <pattern> содержит regex, начинающийся с /. Удалите этот слеш, так как он излишний. Если этот шаблон используется в include(), убедитесь, что шаблон include() имеет конечный /.
  • urls.W003: Ваш шаблон URL <pattern> содержит name, включающий :. Удалите двоеточие, чтобы избежать неоднозначных ссылок на пространства имён.
  • urls.E004: Ваш шаблон URL <pattern> недействителен. Убедитесь, что urlpatterns — это список экземпляров url().
  • urls.W005: Пространство имён URL <namespace> не уникально. Возможно, вы не сможете обращаться ко всем URL-адресам в этом пространстве имён.
  • urls.E006: Параметр MEDIA_URL/ STATIC_URL должен заканчиваться слешем.

contrib проверки приложений

admin

Проверки администрирования выполняются в рамках тега admin.

Ниже приведены проверки, выполняемые для любого ModelAdmin (или подкласса), зарегистрированного в админ-панели:

  • admin.E001: Значение raw_id_fields должно быть списком или кортежем.
  • admin.E002: Значение raw_id_fields[n] ссылается на <field name>, что не является атрибутом <model>.
  • admin.E003: Значение raw_id_fields[n] должно быть полем внешнего ключа или связи многие-ко-многим.
  • admin.E004: Значение fields должно быть списком или кортежем.
  • admin.E005: Оба fieldsets и fields указаны.
  • admin.E006: Значение fields содержит дублирующее(ые) поле(я).
  • admin.E007: Значение fieldsets должно быть списком или кортежем.
  • admin.E008: Значение fieldsets[n] должно быть списком или кортежем.
  • admin.E009: Значение fieldsets[n] должно иметь длину 2.
  • admin.E010: Значение fieldsets[n][1] должно быть словарем.
  • admin.E011: Значение fieldsets[n][1] должно содержать ключ fields.
  • admin.E012: В fieldsets[n][1] есть дублирующее(ые) поле(я).
  • admin.E013: fields[n]/fieldsets[n][m] не может включать ManyToManyField <field name>, так как это поле вручную задаёт модель отношений.
  • admin.E014: Значение exclude должно быть списком или кортежем.
  • admin.E015: Значение exclude содержит дублирующее(ые) поле(я).
  • admin.E016: Значение form должно наследоваться от BaseModelForm.
  • admin.E017: Значение filter_vertical должно быть списком или кортежем.
  • admin.E018: Значение filter_horizontal должно быть списком или кортежем.
  • admin.E019: Значение filter_vertical[n]/filter_vertical[n] ссылается на <field name>, что не является атрибутом <model>.
  • admin.E020: Значение filter_vertical[n]/filter_vertical[n] должно быть полем связи многие-ко-многим.
  • admin.E021: Значение radio_fields должно быть словарем.
  • admin.E022: Значение radio_fields ссылается на <field name>, что не является атрибутом <model>.
  • admin.E023: Значение radio_fields ссылается на <field name>, что не является ForeignKey, и не имеет определения choices.
  • admin.E024: Значение radio_fields[<field name>] должно быть либо admin.HORIZONTAL, либо admin.VERTICAL.
  • admin.E025: Значение view_on_site должно быть вызываемым или булевым значением.
  • admin.E026: Значение prepopulated_fields должно быть словарем.
  • admin.E027: Значение prepopulated_fields ссылается на <field name>, что не является атрибутом <model>.
  • admin.E028: Значение prepopulated_fields ссылается на <field name>, которое не должно быть полем DateTimeField, ForeignKey, OneToOneField, или ManyToManyField.
  • admin.E029: Значение prepopulated_fields[<field name>] должно быть списком или кортежем.
  • admin.E030: Значение prepopulated_fields ссылается на <field name>, что не является атрибутом <model>.
  • admin.E031: Значение ordering должно быть списком или кортежем.
  • admin.E032: Значение ordering имеет маркер случайного упорядочивания ?, но также содержит другие поля.
  • admin.E033: Значение ordering ссылается на <field name>, что не является атрибутом <model>.
  • admin.E034: Значение readonly_fields должно быть списком или кортежем.
  • admin.E035: Значение readonly_fields[n] не является вызываемым, атрибутом <ModelAdmin class>, или атрибутом <model>.

ModelAdmin

Ниже приведены проверки, выполняемые для любого ModelAdmin, зарегистрированного в админ-панели:

  • admin.E101: Значение save_as должно быть булевым.
  • admin.E102: Значение save_on_top должно быть булевым.
  • admin.E103: Значение inlines должно быть списком или кортежем.
  • admin.E104: <InlineModelAdmin class> должно наследоваться от InlineModelAdmin.
  • admin.E105: <InlineModelAdmin class> должен иметь атрибут model.
  • admin.E106: Значение <InlineModelAdmin class>.model должно быть Model.
  • admin.E107: Значение list_display должно быть списком или кортежем.
  • admin.E108: Значение list_display[n] ссылается на <label>, что не является вызываемым, атрибутом <ModelAdmin class>, или атрибутом или методом <model>.
  • admin.E109: Значение list_display[n] не должно быть полем ManyToManyField.
  • admin.E110: Значение list_display_links должно быть списком, кортежем или None.
  • admin.E111: Значение list_display_links[n] ссылается на <label>, которое не определено в list_display.
  • admin.E112: Значение list_filter должно быть списком или кортежем.
  • admin.E113: Значение list_filter[n] должно наследоваться от ListFilter.
  • admin.E114: Значение list_filter[n] не должно наследоваться от FieldListFilter.
  • admin.E115: Значение list_filter[n][1] должно наследоваться от FieldListFilter.
  • admin.E116: Значение list_filter[n] ссылается на <label>, которое не ссылается на поле.
  • admin.E117: Значение list_select_related должно быть булевым значением, кортежем или списком.
  • admin.E118: Значение list_per_page должно быть целым числом.
  • admin.E119: Значение list_max_show_all должно быть целым числом.
  • admin.E120: Значение list_editable должно быть списком или кортежем.
  • admin.E121: Значение list_editable[n] ссылается на <label>, что не является атрибутом <model>.
  • admin.E122: Значение list_editable[n] ссылается на <label>, которое не содержится в list_display.
  • admin.E123: Значение list_editable[n] не может присутствовать как в list_editable, так и в list_display_links.
  • admin.E124: Значение list_editable[n] ссылается на первое поле в list_display (<label>). Это недопустимо, если list_display_links не задано.
  • admin.E125: Значение list_editable[n] ссылается на <field name>, которое не редактируется через админ-панель.
  • admin.E126: Значение search_fields должно быть списком или кортежем.
  • admin.E127: Значение date_hierarchy ссылается на <field name>, которое не ссылается на поле.
  • admin.E128: Значение date_hierarchy должно быть DateField или DateTimeField.

InlineModelAdmin

Ниже приведены проверки, выполняемые для любого InlineModelAdmin, зарегистрированного как встраиваемое поле в ModelAdmin.

  • admin.E201: Невозможно исключить поле <field name>, так как оно является внешним ключом к родительской модели <app_label>.<model>.
  • admin.E202: <model> не имеет ForeignKey к <parent model>./ <model> имеет более одного ForeignKey к <parent model>.
  • admin.E203: Значение extra должно быть целым числом.
  • admin.E204: Значение max_num должно быть целым числом.
  • admin.E205: Значение min_num должно быть целым числом.
  • admin.E206: Значение formset должно наследоваться от BaseModelFormSet.

GenericInlineModelAdmin

Следующие проверки выполняются для любого GenericInlineModelAdmin, зарегистрированного как встроенный элемент в ModelAdmin.

  • admin.E301: 'ct_field' ссылается на <label>, что не является полем в <model>.
  • admin.E302: 'ct_fk_field' ссылается на <label>, что не является полем в <model>.
  • admin.E303: <model> не имеет GenericForeignKey.
  • admin.E304: <model> не имеет GenericForeignKey, используя поле типа содержимого <field name> и поле идентификатора объекта <field name>.

AdminSite

Следующие проверки выполняются для стандартного AdminSite:

  • admin.E401: django.contrib.contenttypes должен быть в INSTALLED_APPS, чтобы использовать приложение администрирования.
  • admin.E402: django.contrib.auth.context_processors.auth должен быть в TEMPLATES, чтобы использовать приложение администрирования.

auth

  • auth.E001: REQUIRED_FIELDS должно быть списком или кортежем.
  • auth.E002: Поле, названное как USERNAME_FIELD для пользовательской модели, не должно быть включено в REQUIRED_FIELDS.
  • auth.E003: <field> должно быть уникальным, поскольку оно названо как USERNAME_FIELD.
  • auth.W004: <field> названо как USERNAME_FIELD, но не является уникальным.
  • auth.E005: Имя разрешения <codename> совпадает с встроенным разрешением для модели <model>.
  • auth.E006: Имя разрешения <codename> дублируется для модели <model>.
  • auth.E007: verbose_name модели <model> должно быть не более 244 символов, чтобы имена встроенных разрешений не превышали 255 символов.
  • auth.E008: Разрешение, названное <name> для модели <model> превышает 255 символов.
  • auth.C009: <User model>.is_anonymous должно быть атрибутом или свойством, а не методом. Игнорирование этого является проблемой безопасности, поскольку анонимные пользователи будут рассматриваться как авторизованные!
  • auth.C010: <User model>.is_authenticated должно быть атрибутом или свойством, а не методом. Игнорирование этого является проблемой безопасности, поскольку анонимные пользователи будут рассматриваться как авторизованные!

contenttypes

Следующие проверки выполняются, когда модель содержит GenericForeignKey или GenericRelation:

  • contenttypes.E001: Объект идентификатора GenericForeignKey ссылается на несуществующее поле <field>.
  • contenttypes.E002: Тип содержимого GenericForeignKey ссылается на несуществующее поле <field>.
  • contenttypes.E003: <field> не является ForeignKey.
  • contenttypes.E004: <field> не является ForeignKey для contenttypes.ContentType.

sites

Следующие проверки выполняются для любой модели, использующей CurrentSiteManager:

  • sites.E001: CurrentSiteManager не смог найти поле, названное <field name>.
  • sites.E002: CurrentSiteManager не может использовать <field>, так как это не внешний ключ или поле "многие ко многим".

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.11/ref/checks/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API