Система проверок фреймворка
Система проверок фреймворка — это набор статических проверок для валидации проектов 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.
Некоторые проверки могут быть зарегистрированы с несколькими тегами.
Добавлен тег 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: Ваша конфигурация
<cache>может сделать ваш кэш уязвимым или привести к повреждению данных, потому что еёLOCATIONсовпадает/находится внутри/содержитMEDIA_ROOT/STATIC_ROOT/STATICFILES_DIRS. -
caches.W003: Ваш кэш
<cache>LOCATIONотносительный. Используйте абсолютный путь вместо него.
База данных
MySQL и MariaDB
Если вы используете MySQL или MariaDB, будут выполнены следующие проверки:
-
mysql.E001: MySQL/MariaDB не допускает уникальных
CharFieldсmax_length> 255. Эта проверка была изменена наmysql.W003в 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не принимают нулевые значения. Эта проверка появилась до добавления поддержки нулевых значений в 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, так как пустые значения хранятся как нулевые. -
fields.E160: Опции
auto_now,auto_now_add, иdefaultвзаимоисключающие. Должна быть присутствовать только одна из них. - fields.W161: Установлено фиксированное значение по умолчанию.
-
fields.W162:
<database>не поддерживает базу данных индекса по столбцам<field data type>. -
fields.E170:
BinaryField’sdefaultне может быть строкой. Используйте байтовый контент вместо этого. -
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 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>не поддерживает уникальные ограничения по выражениям. -
models.W045: Ограничение проверки
<constraint>содержит выражениеRawSQL()и не будет проверено во время моделированияfull_clean().
Безопасность
Проверки безопасности не гарантируют безопасность вашего сайта. Они не проверяют код, не обнаруживают вторжения и не выполняют сложных задач. Вместо этого они помогают выполнить автоматическую проверку простых ошибок, что может помочь улучшить безопасность вашего сайта.
Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если перенаправление 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 от межсайтовых атак с подделкой запроса (CSRF) через 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не установлена в значениеX-XSS-Protection, поэтому ваши страницы не будут передаваться с заголовком'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. Пожалуйста, сгенерируйте длинное и случайное значение, иначе многие критически важные для безопасности функции Django будут уязвимы к атакам. -
security.W010: У вас есть
django.contrib.sessionsв вашемINSTALLED_APPS, но вы не установилиSESSION_COOKIE_SECUREвTrue. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей средствами перехвата сетевого трафика. -
security.W011: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE, но вы не установилиSESSION_COOKIE_SECUREвTrue. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей средствами перехвата сетевого трафика. -
security.W012:
SESSION_COOKIE_SECUREне установлена вTrue. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей средствами перехвата сетевого трафика. -
security.W013: У вас есть
django.contrib.sessionsв вашемINSTALLED_APPS, но вы не установилиSESSION_COOKIE_HTTPONLYвTrue. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей с помощью атак XSS. -
security.W014: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE, но вы не установилиSESSION_COOKIE_HTTPONLYвTrue. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей с помощью атак XSS. -
security.W015:
SESSION_COOKIE_HTTPONLYне установлена вTrue. Использование cookie сессии только для защищенных соединений затрудняет перехват сессий пользователей с помощью атак XSS. -
security.W016:
CSRF_COOKIE_SECUREне установлена вTrue. Использование cookie CSRF только для защищенных соединений затрудняет перехват токена CSRF средствами перехвата сетевого трафика. -
security.W017:
CSRF_COOKIE_HTTPONLYне установлена вTrue. Использование cookie CSRF только для защищенных соединений затрудняет перехват токена CSRF с помощью атак XSS. *Эта проверка удалена в Django 1.11, так как настройка*CSRF_COOKIE_HTTPONLY*не имеет практической пользы.* -
security.W018: В развертывании не должно быть установлено
DEBUGв значениеTrue. -
security.W019: У вас есть
django.middleware.clickjacking.XFrameOptionsMiddlewareв вашемMIDDLEWARE, но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.W025: Ваша настройка
SECRET_KEY_FALLBACKS[n]содержит менее 50 символов, менее 5 уникальных символов или начинается с'django-insecure-', что указывает на автоматическую генерацию Django. Пожалуйста, сгенерируйте длинное и случайное значение, иначе многие критически важные для безопасности функции Django будут уязвимы к атакам.
Следующие проверки гарантируют правильную конфигурацию ваших настроек безопасности:
-
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}). -
templates.E003:
<name>используется для нескольких модулей тегов шаблонов:<module list>.
Перевод
Следующие проверки выполняются для вашей конфигурации перевода:
-
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>и поля идентификатора объекта<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.1/ref/checks/