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

Фреймворк 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: Checks files related configuration.
  • models: Проверка определений модели, поля и менеджера.
  • security: Проверяет конфигурацию, связанную с безопасностью.
  • signals: Проверяет объявления сигналов и регистрацию обработчиков.
  • sites: Проверяет конфигурацию django.contrib.sites.
  • staticfiles: Проверяет конфигурацию django.contrib.staticfiles.
  • templates: Проверяет конфигурацию, связанную с шаблоном.
  • translation: Проверяет конфигурацию, связанную с переводом.
  • urls: Проверяет конфигурацию URL.

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

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

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

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

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

Проверка совместимости предупреждает о потенциальных проблемах, которые могут возникнуть после обновления 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.

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

The following checks verify your setup for Управление файлами:

Поля модели

  • fields.E001: Имена полей не должны заканчиваться символом подчеркивания.
  • fields.E002: Имена полей не должны содержать "__".
  • fields.E003: pk - это зарезервированное слово, которое не может быть использовано в качестве имени поля.
  • fields.E004: choices должен быть итерабельным (например, список или кортеж).
  • fields.E005: choices must be an iterable containing (actual value, human readable name) tuples.
  • 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 must be a positive integer.
  • fields.E134: max_digits должно быть больше или равно decimal_places.
  • fields.E140: FilePathFields должны иметь либо allow_files, либо allow_folders, установленные в True.
  • fields.E150: GenericIPAddressFields cannot have blank=True if null=False, as blank values are stored as nulls.
  • 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> does not support a database collation on <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 is deprecated. Support for it (except in historical migrations) will be removed in Django 4.0. This check appeared in Django 3.1 and 3.2.
  • fields.E903: NullBooleanField is removed except for support in historical migrations.
  • fields.W904: django.contrib.postgres.fields.JSONField is deprecated. Support for it (except in historical migrations) will be removed in Django 4.0. This check appeared in Django 3.1 and 3.2.
  • fields.E904: django.contrib.postgres.fields.JSONField is removed except for support in historical migrations.
  • fields.W905: django.contrib.postgres.fields.CICharField is deprecated. Support for it (except in historical migrations) will be removed in Django 5.1.
  • fields.W906: django.contrib.postgres.fields.CIEmailField is deprecated. Support for it (except in historical migrations) will be removed in Django 5.1.
  • fields.W907: django.contrib.postgres.fields.CITextField is deprecated. Support for it (except in historical migrations) will be removed in Django 5.1.

Поля файлов

  • 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: The field <field name> clashes with the field <field name> from model <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> does not support indexes on expressions.
  • models.W044: <database> does not support unique constraints on expressions.
  • models.W045: Ограничение проверки <constraint> содержит выражение RawSQL() и не будет проверено во время модели full_clean().

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

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

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

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

  • security.W001: You do not have django.middleware.security.SecurityMiddleware in your MIDDLEWARE so the SECURE_HSTS_SECONDS, SECURE_CONTENT_TYPE_NOSNIFF, SECURE_REFERRER_POLICY, SECURE_CROSS_ORIGIN_OPENER_POLICY, and SECURE_SSL_REDIRECT settings will have no effect.
  • 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: Your SECURE_BROWSER_XSS_FILTER setting is not set to True, so your pages will not be served with an 'X-XSS-Protection: 1; mode=block' header. You should consider enabling this header to activate the browser’s XSS filtering and help prevent XSS attacks. This check is removed in Django 3.0 as the X-XSS-Protection header is no longer honored by modern browsers.
  • security.W008: Ваш параметр SECURE_SSL_REDIRECT не установлен в значение True. Если ваш сайт должен быть доступен как через SSL, так и через не-SSL соединения, вам следует установить значение True или настроить балансировщик нагрузки или обратный прокси-сервер для перенаправления всех соединений на HTTPS.
  • security.W009: Your SECRET_KEY has less than 50 characters, less than 5 unique characters, or it’s prefixed with 'django-insecure-' indicating that it was generated automatically by Django. Please generate a long and random value, otherwise many of Django’s security-critical features will be vulnerable to attack.
  • 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: You have set the SECURE_CROSS_ORIGIN_OPENER_POLICY setting to an invalid value.
  • security.W025: Your SECRET_KEY_FALLBACKS[n] has less than 50 characters, less than 5 unique characters, or it’s prefixed with 'django-insecure-' indicating that it was generated automatically by Django. Please generate a long and random value, otherwise many of Django’s security-critical features will be vulnerable to attack.

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

  • security.E100: DEFAULT_HASHING_ALGORITHM must be 'sha1' or 'sha256'. This check appeared in Django 3.1 and 3.2.
  • security.E101: The CSRF failure view 'path.to.view' does not take the correct number of arguments.
  • security.E102: The CSRF failure view 'path.to.view' could not be imported.

Сигналы

  • 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}).
  • templates.E003:<name> is used for multiple template tag modules: <module list>. This check was changed to templates.W003 in Django 4.1.2.
  • templates.W003:<name> is used for multiple template tag modules: <module list>.

Перевод

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

  • 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() и/или re_path().
  • 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: The value of raw_id_fields[n] refers to <field name>, which is not a field of <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: The value of filter_vertical[n]/filter_horizontal[n] refers to <field name>, which is not a field of <model>.
  • admin.E020: The value of filter_vertical[n]/filter_horizontal[n] must be a many-to-many field.
  • admin.E021: Значение radio_fields должно быть словарем.
  • admin.E022: The value of radio_fields refers to <field name>, which is not a field of <model>.
  • admin.E023: The value of radio_fields refers to <field name>, which is not an instance of ForeignKey, and does not have a choices definition.
  • admin.E024: Значение radio_fields[<field name>] должно быть либо admin.HORIZONTAL, либо admin.VERTICAL.
  • admin.E025: Значение view_on_site должно быть либо вызываемым, либо булевым значением.
  • admin.E026: Значение prepopulated_fields должно быть словарем.
  • admin.E027: The value of prepopulated_fields refers to <field name>, which is not a field of <model>.
  • admin.E028: Значение prepopulated_fields относится к <field name>, которое не должно быть полем DateTimeField, ForeignKey, OneToOneField или ManyToManyField.
  • admin.E029: Значение prepopulated_fields[<field name>] должно быть списком или кортежем.
  • admin.E030: The value of prepopulated_fields refers to <field name>, which is not a field of <model>.
  • admin.E031: Значение ordering должно быть списком или кортежем.
  • admin.E032: Значение ordering имеет маркер случайного упорядочивания ?, но содержит и другие поля.
  • admin.E033: The value of ordering refers to <field name>, which is not a field of <model>.
  • admin.E034: Значение readonly_fields должно быть списком или кортежем.
  • admin.E035: Значение readonly_fields[n] не является вызываемым, атрибутом <ModelAdmin class> или атрибутом <model>.
  • admin.E036: Значение autocomplete_fields должно быть списком или кортежем.
  • admin.E037: The value of autocomplete_fields[n] refers to <field name>, which is not a field of <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: The value of list_editable[n] refers to <label>, which is not a field of <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.
  • postgres.W004: Base field for array has warnings: …

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: The directory <directory> in the STATICFILES_DIRS does not exist.
Вернуться на верх