Система проверок фреймворка
Система проверок фреймворка — это набор статических проверок для валидации проектов Django. Она обнаруживает распространённые проблемы и предоставляет подсказки по их исправлению. Фреймворк расширяем, поэтому вы можете легко добавить свои собственные проверки.
Подробные сведения о том, как добавить свои собственные проверки и интегрировать их с системами проверок Django, см. в руководстве Руководство по системам проверок.
Справочник 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)
Встроенные теги
-
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.
Некоторые проверки могут быть зарегистрированы с несколькими тегами.
Добавлен тег sites.
Добавлен тег files.
Основные проверки системы
Поддержка асинхронности
Следующие проверки проверяют вашу настройку для Поддержки асинхронности:
-
async.E001: Не следует устанавливать переменную окружения
DJANGO_ALLOW_ASYNC_UNSAFEв рабочей среде. Это отключает защиту от асинхронных ошибок.
Обратная совместимость
Проверки совместимости предупреждают о потенциальных проблемах, которые могут возникнуть после обновления 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: Ваша конфигурация кэша может привести к раскрытию кэша или нарушению целостности данных, так как её значение
LOCATIONсовпадает/вложено/содержитMEDIA_ROOT/STATIC_ROOT/STATICFILES_DIRS. -
caches.W003: Путь к кэшу
<cache>LOCATIONявляется относительным. Используйте абсолютный путь вместо него.
База данных
MySQL и MariaDB
Если вы используете MySQL или MariaDB, будут выполнены следующие проверки:
-
mysql.E001: MySQL/MariaDB не позволяет уникальным
CharFieldиметьmax_length> 255. Эта проверка была изменена в Django 3.1, так как реальный максимальный размер зависит от многих факторов. -
mysql.W002: Режим строгости MySQL/MariaDB не задан для подключения к базе данных
<alias>. См. также Настройка sql_mode. -
mysql.W003: MySQL/MariaDB может не разрешать уникальным
CharFieldиметьmax_length> 255.
Управление файлами
Следующие проверки проверяют вашу настройку для Управления файлами:
-
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>должно быть вызываемым объектом, а не экземпляром, чтобы оно не использовалось совместно между всеми экземплярами поля. -
fields.E100:
AutoFieldдолжны устанавливать primary_key=True. -
fields.E110:
BooleanFieldне принимают значения null. Эта проверка появилась до добавления поддержки значений null в Django 2.1. -
fields.E120:
CharFieldдолжны определять атрибутmax_length. -
fields.E121:
max_lengthдолжно быть положительным целым числом. -
fields.W122:
max_lengthигнорируется при использовании с<integer field type>. -
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не могут иметьblank=Trueеслиnull=False, так как пустые значения хранятся как null. -
fields.E160: Опции
auto_now,auto_now_add, иdefaultвзаимоисключающие. Должна быть присутствовать только одна из них. - fields.W161: Предоставлено фиксированное значение по умолчанию.
-
fields.W162:
<database>не поддерживает базовый индекс на столбцах<field data type>. -
fields.E170:
BinaryField’sdefaultне может быть строкой. Используйте содержимое типа bytes вместо этого. -
fields.E180:
<database>не поддерживаетJSONField. -
fields.E190:
<database>не поддерживает сортировку базы данных для<field_type>. -
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: Аргумент
upload_toдляFileFieldдолжен быть относительным путем, а не абсолютным. -
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>, ноManyToManyFieldне поддерживаются для этого параметра. -
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'. Если нет веских причин для отображения вашего сайта во фрейме, рекомендуется включить этот заголовок для предотвращения атак кликджекинга. -
security.W003: Похоже, вы не используете встроенную защиту от межсайтовых поддельных запросов (CSRF) Django через middleware (
django.middleware.csrf.CsrfViewMiddlewareотсутствует в вашемMIDDLEWARE). Включение 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, так и без него, рекомендуется установить данную настройку в значение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. Использование защищённого только через SSL cookie сессии затрудняет перехват сессий пользователей злоумышленниками. -
security.W011: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE, но вы не установилиSESSION_COOKIE_SECUREв значениеTrue. Использование защищённого только через SSL cookie сессии затрудняет перехват сессий пользователей злоумышленниками. -
security.W012:
SESSION_COOKIE_SECUREне установлено в значениеTrue. Использование защищённого только через SSL cookie сессии затрудняет перехват сессий пользователей злоумышленниками. -
security.W013: У вас есть
django.contrib.sessionsв вашемINSTALLED_APPS, но вы не установилиSESSION_COOKIE_HTTPONLYв значениеTrue. Использование защищённого от XSS cookie сессии затрудняет перехват сессий пользователей атаками XSS. -
security.W014: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE, но вы не установилиSESSION_COOKIE_HTTPONLYв значениеTrue. Использование защищённого от XSS cookie сессии затрудняет перехват сессий пользователей атаками XSS. -
security.W015:
SESSION_COOKIE_HTTPONLYне установлено в значениеTrue. Использование защищённого от XSS cookie сессии затрудняет перехват сессий пользователей атаками XSS. -
security.W016:
CSRF_COOKIE_SECUREне установлено в значениеTrue. Использование защищённого только через SSL cookie CSRF затрудняет перехват токена CSRF злоумышленниками. -
security.W017:
CSRF_COOKIE_HTTPONLYне установлено в значениеTrue. Использование защищённого от XSS cookie CSRF затрудняет перехват токена CSRF атаками XSS. Эта проверка удалена в 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вTEMPLATESOPTIONSдолжен быть строкой, но получено значение:{value}({type}).
Перевод
Следующие проверки выполняются для вашей конфигурации перевода:
-
translation.E001: Вы предоставили недопустимое значение для параметра
LANGUAGE_CODE:<value>. -
translation.E002: Вы предоставили недопустимый код языка в параметре
LANGUAGES:<value>. -
translation.E003: Вы предоставили недопустимый код языка в параметре
LANGUAGES_BIDI:<value>. -
translation.E004: Вы предоставили значение для параметра
LANGUAGE_CODE, которое отсутствует в параметреLANGUAGES.
URL-адреса
Следующие проверки выполняются для вашей конфигурации 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 проверки приложений
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_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>и поле ID объекта<field name>.
AdminSite
Следующие проверки выполняются для стандартной AdminSite:
-
admin.E401:
django.contrib.contenttypesдолжно быть вINSTALLED_APPSдля использования приложения администрирования. -
admin.E402:
django.contrib.auth.context_processors.authдолжен быть включён вDjangoTemplates(TEMPLATES), если используется стандартный бэкенд авторизации, для использования приложения администрирования. -
admin.E403: Экземпляр
django.template.backends.django.DjangoTemplatesдолжен быть настроен вTEMPLATESдля использования приложения администрирования. -
admin.E404:
django.contrib.messages.context_processors.messagesдолжен быть включен вDjangoTemplates(TEMPLATES) для использования приложения администрирования. -
admin.E405:
django.contrib.authдолжно быть вINSTALLED_APPSдля использования приложения администрирования. -
admin.E406:
django.contrib.messagesдолжно быть вINSTALLED_APPSдля использования приложения администрирования. -
admin.E408:
django.contrib.auth.middleware.AuthenticationMiddlewareдолжно быть вMIDDLEWAREдля использования приложения администрирования. -
admin.E409:
django.contrib.messages.middleware.MessageMiddlewareдолжно быть вMIDDLEWAREдля использования приложения администрирования. -
admin.E410:
django.contrib.sessions.middleware.SessionMiddlewareдолжно быть вMIDDLEWAREдля использования приложения администрирования. -
admin.W411:
django.template.context_processors.requestдолжен быть включён вDjangoTemplates(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должен быть атрибутом или свойством, а не методом. Игнорирование этого — проблема безопасности, так как анонимные пользователи будут считаться авторизованными! -
auth.E011: Имя модели
<model>должно содержать не более 93 символов, чтобы имена встроенных разрешений не превышали 100 символов. -
auth.E012: Разрешение с именем
<codename>модели<model>длиннее 100 символов.
contenttypes
Следующие проверки выполняются, когда модель содержит GenericForeignKey или GenericRelation:
-
contenttypes.E001: Объект ID
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>должно быть вызываемым объектом, а не экземпляром, чтобы оно не использовалось совместно всеми экземплярами полей. Эта проверка была изменена на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не существует.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.0/ref/checks/