Рамка проверки системы

Фреймворк system check - это набор статических проверок для проверки проектов Django. Он обнаруживает распространенные проблемы и дает подсказки, как их устранить. Фреймворк является расширяемым, поэтому вы можете легко добавлять свои собственные проверки.

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

Справочник по API

CheckMessage

class CheckMessage(level, msg, hint=None, obj=None, id=None)[исходный код]

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

Аргументами конструктора являются:

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

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

class Debug(msg, hint=None, obj=None, id=None)[исходный код]
class Info(msg, hint=None, obj=None, id=None)[исходный код]
class Warning(msg, hint=None obj=None, id=None)[исходный код]
class Error(msg, hint=None, obj=None, id=None)[исходный код]
class Critical(msg, hint=None, obj=None, id=None)[исходный код]

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

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

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

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

Changed in Django 3.2:

Был добавлен тег sites.

Changed in Django 4.0:

Был добавлен тег files.

Проверки основных систем

Поддержка асинхронного режима

Следующие проверки проверяют вашу настройку для Поддержка асинхронного режима:

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

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

  • 2_0.W001: Ваш шаблон URL <pattern> имеет route, который содержит (?P<, начинается с ^ или заканчивается $. Скорее всего, это было упущением при переходе с url() на path().
  • 4_0.E001: Начиная с Django 4.0, значения в настройке CSRF_TRUSTED_ORIGINS должны начинаться со схемы (обычно http:// или https://), но встречается <hostname>.

Кэши

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

  • caches.E001: Вы должны определить кэш 'default' в настройках CACHES.
  • caches.W002: Ваша конфигурация <cache> может раскрыть ваш кэш или привести к повреждению данных, потому что его LOCATION совпадает/находится внутри/содержит MEDIA_ROOT/STATIC_ROOT/STATICFILES_DIRS.
  • caches.W003: Ваш кэш <cache> LOCATION является относительным. Вместо этого используйте абсолютный путь.

База данных

MySQL и MariaDB

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

  • mysql.E001: MySQL/MariaDB не позволяет уникальным CharFields иметь max_length > 255. Эта проверка была изменена на mysql.W003 в Django 3.1, так как реальный максимальный размер зависит от многих факторов.
  • mysql.W002: MySQL/MariaDB Strict Mode не установлен для соединения с базой данных <alias>. См. также Установка sql_mode.
  • mysql.W003: MySQL/MariaDB может не разрешать уникальным CharFields иметь max_length > 255.

Управление файлами

New in Django 4.0.

Следующие проверки проверяют вашу настройку для Управление файлами:

  • files.E001: Параметр FILE_UPLOAD_TEMP_DIR относится к несуществующему каталогу <path>.

Поля модели

  • 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.E008: Все validators должны быть вызываемыми.
  • fields.E009: max_length слишком мал, чтобы вместить самое длинное значение в choices (<count> символов).
  • fields.E010: <field> default должен быть вызываемым, а не экземпляром, чтобы он не был общим для всех экземпляров поля.
  • fields.E100: AutoFields должен установить primary_key=True.
  • fields.E110: BooleanFields не принимает нулевые значения. Эта проверка появилась до того, как в Django 2.1. была добавлена поддержка нулевых значений
  • fields.E120: CharFields должны определять max_length атрибут.
  • fields.E121: max_length должно быть положительным целым числом.
  • fields.W122: max_length игнорируется при использовании с <integer field type>.
  • fields.E130: DecimalFields должны определять decimal_places атрибут.
  • fields.E131: decimal_places должно быть неотрицательным целым числом.
  • fields.E132: DecimalFields должны определять max_digits атрибут.
  • fields.E133: max_digits должно быть положительным целым числом.
  • fields.E134: max_digits должно быть больше или равно decimal_places.
  • fields.E140: FilePathFields должны иметь либо allow_files, либо << 2 >>>, установленные в True.
  • fields.E150: GenericIPAddressFields не может иметь blank=True, если null=False, так как пустые значения хранятся как нули.
  • fields.E160: Опции auto_now, auto_now_add и default являются взаимоисключающими. Только одна из этих опций может присутствовать.
  • fields.W161: Исправлено значение по умолчанию.
  • fields.W162: <database> не поддерживает индекс базы данных на <field data type> столбцах.
  • fields.E170: BinaryFielddefault не может быть строкой. Вместо этого используйте содержимое байта.
  • fields.E180: <database> не поддерживает JSONFields.
  • fields.E190: <database> не поддерживает collation базы данных на <field_type>s.
  • fields.E900: IPAddressField был удален, за исключением поддержки в исторических миграциях.
  • fields.W900: IPAddressField был устаревшим. Его поддержка (за исключением исторических миграций) будет удалена в Django 1.9. Эта проверка появилась в Django 1.7 и 1.8.
  • fields.W901: CommaSeparatedIntegerField был устаревшим. Его поддержка (за исключением исторических миграций) будет удалена в Django 2.0. Эта проверка появилась в Django 1.10 и 1.11.
  • fields.E901: CommaSeparatedIntegerField удален, за исключением поддержки в исторических миграциях.
  • fields.W902: FloatRangeField устарел и будет удален в Django 3.1. Эта проверка появилась в Django 2.2 и 3.0.
  • fields.W903: NullBooleanField является устаревшим. Его поддержка (за исключением исторических миграций) будет удалена в Django 4.0. Эта проверка появилась в Django 3.1 и 3.2.
  • fields.E903: NullBooleanField удален, за исключением поддержки в исторических миграциях.
  • fields.W904: django.contrib.postgres.fields.JSONField является устаревшим. Его поддержка (за исключением исторических миграций) будет удалена в Django 4.0. Эта проверка появилась в Django 3.1 и 3.2.
  • fields.E904: django.contrib.postgres.fields.JSONField удален, за исключением поддержки в исторических миграциях.

Поля файлов

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

Модели

  • 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> сталкивается с полем <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: constraints/indexes/index_together/unique_together ссылается на несуществующее поле <field name>.
  • models.E013: constraints/indexes/index_together/unique_together относится к ManyToManyField <field name>, но ManyToManyFields не поддерживаются для этой опции.
  • models.E014: ordering должен быть кортежем или списком (даже если вы хотите упорядочить только по одному полю).
  • models.E015: ordering относится к несуществующему полю, связанному полю или поиску <field name>.
  • models.E016: constraints/indexes/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> не может содержать двойное подчеркивание, так как это противоречит синтаксису поиска запроса.
  • models.E025: Свойство <property name> конфликтует со связанным аксессором поля.
  • models.E026: Модель не может иметь более одного поля с primary_key=True.
  • models.W027: <database> не поддерживает ограничения проверки.
  • models.E028: db_table <db_table> используется несколькими моделями: <model list>.
  • models.E029: имя индекса <index> не является уникальным для модели <model>.
  • models.E030: имя индекса <index> не является уникальным среди моделей: <model list>.
  • models.E031: имя ограничения <constraint> не является уникальным для модели <model>.
  • models.E032: имя ограничения <constraint> не является уникальным среди моделей: <model list>.
  • models.E033: Имя индекса <index> не может начинаться с символа подчеркивания или цифры.
  • models.E034: Имя индекса <index> не может быть длиннее <max_length> символов.
  • models.W035: db_table <db_table> используется несколькими моделями: <model list>.
  • models.W036: <database> не поддерживает уникальные ограничения с условиями.
  • models.W037: <database> не поддерживает индексы с условиями.
  • models.W038: <database> не поддерживает откладываемые уникальные ограничения.
  • models.W039: <database> не поддерживает уникальные ограничения с неключевыми столбцами.
  • models.W040: <database> не поддерживает индексы с неключевыми столбцами.
  • models.E041: constraints относится к объединенному полю <field name>.
  • models.W042: Автоматически созданный первичный ключ используется, если не определен тип первичного ключа, по умолчанию django.db.models.AutoField.
  • models.W043: <database> не поддерживает индексы на выражениях.
  • models.W044: <database> не поддерживает уникальные ограничения на выражения.

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

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

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

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

  • security.W001: У вас нет django.middleware.security.SecurityMiddleware в MIDDLEWARE, поэтому настройки SECURE_HSTS_SECONDS, SECURE_CONTENT_TYPE_NOSNIFF, SECURE_REFERRER_POLICY, SECURE_CROSS_ORIGIN_OPENER_POLICY и SECURE_SSL_REDIRECT не будут иметь эффекта.
  • security.W002: У вас нет django.middleware.clickjacking.XFrameOptionsMiddleware в MIDDLEWARE, поэтому ваши страницы не будут обслуживаться с заголовком 'x-frame-options'. Если нет веских причин для того, чтобы ваш сайт обслуживался во фрейме, вы должны рассмотреть возможность включения этого заголовка, чтобы помочь предотвратить атаки clickjacking.
  • security.W003: Похоже, что вы не используете встроенную в Django защиту от подделки межсайтовых запросов через промежуточное ПО (django.middleware.csrf.CsrfViewMiddleware отсутствует в вашем 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-атаки. Эта проверка удалена в Django 3.0, поскольку * ``X-XSS-Protection`` *заголовок больше не поддерживается современными браузерами.
  • security.W008: Ваш параметр SECURE_SSL_REDIRECT не установлен в значение True. Если ваш сайт должен быть доступен как через SSL, так и через не-SSL соединения, вам следует установить значение True или настроить балансировщик нагрузки или обратный прокси-сервер для перенаправления всех соединений на HTTPS.
  • security.W009: Ваш SECRET_KEY содержит менее 50 символов, менее 5 уникальных символов или имеет префикс 'django-insecure-', указывающий на то, что он был сгенерирован Django автоматически. Пожалуйста, сгенерируйте длинный и случайный SECRET_KEY, иначе многие важные для безопасности функции Django будут уязвимы для атак.
  • security.W010: У вас есть django.contrib.sessions в INSTALLED_APPS, но вы не установили SESSION_COOKIE_SECURE в True. Использование куки-файлов только для защищенных сеансов затрудняет перехват сеансов пользователя снифферами сетевого трафика.
  • security.W011: У вас django.contrib.sessions.middleware.SessionMiddleware в MIDDLEWARE, но вы не установили SESSION_COOKIE_SECURE в True. Использование куки-файлов только для защищенных сеансов затрудняет перехват сеансов пользователя снифферами сетевого трафика.
  • security.W012: SESSION_COOKIE_SECURE не установлено в True. Использование куки-файла только для защищенных сеансов затрудняет перехват сеансов пользователя программами-снифферами сетевого трафика.
  • security.W013: У вас есть django.contrib.sessions в INSTALLED_APPS, но вы не установили SESSION_COOKIE_HTTPONLY в True. Использование куки сеанса HttpOnly усложняет атаки межсайтового скриптинга для перехвата сеансов пользователя.
  • security.W014: У вас есть django.contrib.sessions.middleware.SessionMiddleware в MIDDLEWARE, но вы не установили SESSION_COOKIE_HTTPONLY в True. Использование куки сеанса HttpOnly усложняет атаки межсайтового скриптинга для перехвата сеансов пользователя.
  • security.W015: SESSION_COOKIE_HTTPONLY не установлено в True. Использование куки сеанса HttpOnly затрудняет перехват сеансов пользователя атаками межсайтового скриптинга.
  • security.W016: CSRF_COOKIE_SECURE не установлено в True. Использование CSRF-куки только с защитой делает более сложным для снифферов сетевого трафика украсть CSRF-токен.
  • security.W017: CSRF_COOKIE_HTTPONLY не установлено значение True. Использование HttpOnly CSRF cookie усложняет межсайтовые скриптовые атаки для кражи CSRF токена. Эта проверка удалена в Django 1.11, поскольку CSRF_COOKIE_HTTPONLY установка не приносит практической пользы.
  • security.W018: Не следует устанавливать DEBUG на True при развертывании.
  • security.W019: У вас есть django.middleware.clickjacking.XFrameOptionsMiddleware в MIDDLEWARE, но X_FRAME_OPTIONS не установлен на 'DENY'. Если нет веских причин для того, чтобы ваш сайт обслуживал другие части себя во фрейме, вам следует изменить это на 'DENY'.
  • security.W020: ALLOWED_HOSTS не должно быть пустым при развертывании.
  • security.W021: Вы не установили параметр SECURE_HSTS_PRELOAD в значение True. Без этого ваш сайт не может быть отправлен в список предварительной загрузки браузера.
  • security.W022: Вы не установили параметр SECURE_REFERRER_POLICY. Без этого ваш сайт не будет отправлять заголовок Referrer-Policy. Вам следует рассмотреть возможность включения этого заголовка для защиты конфиденциальности пользователей.
  • security.E023: Вы установили недопустимое значение параметра SECURE_REFERRER_POLICY.
  • security.E024: Вы установили недопустимое значение параметра SECURE_CROSS_ORIGIN_OPENER_POLICY.

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

  • security.E100: DEFAULT_HASHING_ALGORITHM должно быть 'sha1' или 'sha256'. Эта проверка появилась в Django 3.1 и 3.2.
  • security.E101: Представление отказа CSRF 'path.to.view' не принимает правильное количество аргументов.
  • security.E102: Не удалось импортировать представление CSRF-сбоя 'path.to.view'.

Сигналы

  • 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}).

Перевод

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

  • translation.E001: Вы указали недопустимое значение для параметра LANGUAGE_CODE: <value>.
  • translation.E002: Вы указали неверный код языка в настройке LANGUAGES: <value>.
  • translation.E003: Вы указали неверный код языка в настройке LANGUAGES_BIDI: <value>.
  • translation.E004: Вы указали значение для параметра LANGUAGE_CODE, которого нет в параметре LANGUAGES.

URLs

Следующие проверки выполняются для вашей конфигурации URL:

  • urls.W001: Ваш шаблон URL <pattern> использует include() с route, заканчивающийся $. Удалите доллар из route, чтобы избежать проблем с включением URL.
  • urls.W002: Ваш шаблон URL <pattern> имеет route, начинающийся с /. Удалите эту косую черту, так как она не нужна. Если этот шаблон направлен на include(), убедитесь, что шаблон include() имеет косую черту /.
  • urls.W003: Ваш шаблон URL <pattern> имеет name, включая :. Удалите двоеточие, чтобы избежать двусмысленных ссылок на пространство имен.
  • urls.E004: Ваш шаблон URL <pattern> недействителен. Убедитесь, что urlpatterns является списком экземпляров path() и/или << 3 >>>.
  • urls.W005: Пространство имен URL <namespace> не является уникальным. Возможно, вы не сможете обратить все URL-адреса в этом пространстве имен.
  • urls.E006: Установка MEDIA_URL/ STATIC_URL должна заканчиваться косой чертой.
  • urls.E007: Пользовательское представление handlerXXX 'path.to.view' не принимает правильное количество аргументов (…).
  • urls.E008: Пользовательское представление handlerXXX 'path.to.view' не может быть импортировано.
  • urls.E009: Ваш шаблон URL <pattern> имеет неверный вид, передайте <view>.as_view() вместо <view>.

contrib app checks

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 и << 1 >>>.
  • 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_horizontal[n] относится к <field name>, которое не является полем <model>.
  • admin.E020: Значение filter_vertical[n]/filter_horizontal[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>.
  • admin.E036: Значение autocomplete_fields должно быть списком или кортежем.
  • admin.E037: Значение autocomplete_fields[n] относится к <field name>, которое не является полем <model>.
  • admin.E038: Значение autocomplete_fields[n] должно быть внешним ключом или полем типа «многие ко многим».
  • admin.E039: Администратор для модели <model> должен быть зарегистрирован, чтобы на него мог ссылаться <modeladmin>.autocomplete_fields.
  • admin.E040: <modeladmin> должен определять search_fields, поскольку на него ссылается <other_modeladmin>.autocomplete_fields.

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.
  • admin.E129: <modeladmin> должен определить has_<foo>_permission() метод для действия <action>.
  • admin.E130: __name__ атрибуты действий, определенных в <modeladmin>, должны быть уникальными. Имя <name> не является уникальным.

InlineModelAdmin

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

  • admin.E201: Невозможно исключить поле <field name>, поскольку оно является внешним ключом к родительской модели <app_label>.<model>.
  • admin.E202: <model> не имеет ForeignKey к <parent model>./ <model> имеет более одного ForeignKey к <parent model>. Вы должны указать атрибут fk_name.
  • 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:

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 должен быть атрибутом или свойством, а не методом. Игнорирование этого является проблемой безопасности, так как анонимные пользователи будут рассматриваться как аутентифицированные!
  • auth.E011: Имя модели <model> должно быть не более 93 символов, чтобы встроенные имена разрешений были не более 100 символов.
  • auth.E012: Разрешение с кодовым именем <codename> модели <model> длиннее 100 символов.

contenttypes

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

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

postgres

Следующие проверки выполняются для полей модели django.contrib.postgres:

  • postgres.E001: Базовое поле для массива имеет ошибки: …
  • postgres.E002: Базовое поле для массива не может быть связанным полем.
  • postgres.E003: <field> default должен быть callable вместо экземпляра, чтобы он не был общим для всех экземпляров поля. Эта проверка была изменена на fields.E010 в Django 3.1.

sites

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

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

Следующие проверки проверяют правильность конфигурации django.contrib.sites:

  • sites.E101: Параметр SITE_ID должен быть целым числом.

staticfiles

Следующие проверки проверяют правильность конфигурации django.contrib.staticfiles:

  • staticfiles.E001: Параметр STATICFILES_DIRS не является кортежем или списком.
  • staticfiles.E002: Параметр STATICFILES_DIRS не должен содержать параметр STATIC_ROOT.
  • staticfiles.E003: Префикс <prefix> в настройке STATICFILES_DIRS не должен заканчиваться косой чертой.
  • staticfiles.W004: Каталог <directory> в каталоге STATICFILES_DIRS не существует.
Вернуться на верх