Система проверки фреймворка
Система проверки фреймворка представляет собой набор статических проверок для валидации проектов 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. -
models: Проверки определений моделей, полей и менеджеров. -
security: Проверки конфигурации, связанной с безопасностью. -
signals: Проверки деклараций сигналов и регистраций обработчиков. -
sites: Проверки конфигурацииdjango.contrib.sites. -
staticfiles: Проверки конфигурацииdjango.contrib.staticfiles. -
templates: Проверки конфигурации, связанной с шаблонами. -
translation: Проверки конфигурации, связанной с переводом. -
urls: Проверки конфигурации URL.
Некоторые проверки могут быть зарегистрированы с несколькими тегами.
Добавлен тег async_support.
Проверки database теперь выполняются только для псевдонимов баз данных, указанных с помощью опции check --database.
Добавлен тег sites.
Основные системные проверки
Поддержка асинхронности
Следующие проверки проверяют вашу настройку для Поддержки асинхронности:
-
async.E001: Не следует устанавливать переменную окружения
DJANGO_ALLOW_ASYNC_UNSAFEв развертывании. Это отключает защиту от асинхронной безопасности.
Обратная совместимость
Проверки совместимости предупреждают о потенциальных проблемах, которые могут возникнуть после обновления Django.
-
2_0.W001: Ваш шаблон URL
<pattern>имеетroute, который содержит(?P<, начинается с^, или заканчивается$. Вероятно, это была ошибка при миграции изurl()кpath().
Кэши
Следующие проверки проверяют, правильно ли настроено ваше значение 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. Эта проверка была изменена в Django 3.1, так как фактический максимальный размер зависит от многих факторов. -
mysql.W002: Режим строгости MySQL/MariaDB не установлен для подключения к базе данных
<alias>. См. также Установка sql_mode. -
mysql.W003: MySQL/MariaDB, возможно, не позволяет уникальным
CharFieldиметьmax_length> 255.
Поля моделей
- 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не могут принимать пустые значения, если не разрешены нулевые значения, так как пустые значения хранятся как нулевые. -
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. -
fields.W904:
django.contrib.postgres.fields.JSONFieldустарел. Поддержка (кроме исторических миграций) будет удалена в Django 4.0.
Файловые поля
-
fields.E200:
unique— некорректный аргумент дляFileField. Эта проверка удалена в Django 1.11. -
fields.E201:
primary_key— некорректный аргумент дляFileField. -
fields.E202: Аргумент
FileField’supload_toдолжен быть относительным путем, а не абсолютным. -
fields.E210: Нельзя использовать
ImageField, так как Pillow не установлен.
Связанные поля
Модели
-
models.E001:
<swappable>не имеет формыapp_label.app_name. -
models.E002:
<SETTING>ссылается на<model>, которая не установлена или является абстрактной. -
models.E003: Модель содержит два идентичных много-к-много отношения через промежуточную модель
<app_label>.<model>. -
models.E004:
idможет использоваться только как имя поля, если поле также устанавливаетprimary_key=True. -
models.E005: Поле
<field name>родительской модели<model>конфликтует с полем<field name>родительской модели<model>. -
models.E006: Поле конфликтует с полем
<field name>модели<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>не поддерживает индексы на выражениях.
Безопасность
Проверки безопасности не делают ваш сайт безопасным. Они не аудитят код, не обнаруживают вторжения и не выполняют ничего особенно сложного. Вместо этого они помогают выполнить автоматизированную проверку простых вещей, которая может помочь вам улучшить безопасность вашего сайта.
Некоторые из этих проверок могут быть неприменимы к вашей конкретной конфигурации развертывания. Например, если перенаправление 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_BROWSER_XSS_FILTER,SECURE_REFERRER_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не установлена в значениеTrue, поэтому ваши страницы не будут передаваться с заголовком'X-XSS-Protection: 1; mode=block'. Вы должны рассмотреть возможность включения этого заголовка, чтобы активировать фильтрацию XSS в браузере и помочь предотвратить атаки XSS. Эта проверка удалена в Django 3.0, так как заголовокX-XSS-Protectionбольше не поддерживается современными браузерами. -
security.W008: Настройка
SECURE_SSL_REDIRECTне установлена в значениеTrue. Если ваш сайт должен быть доступен как по SSL, так и без SSL-соединений, вы можете установить это значение вTrueили настроить балансировщик нагрузки или обратный прокси-сервер для перенаправления всех соединений на HTTPS. -
security.W009: У вашего
SECRET_KEYменее 50 символов, менее 5 уникальных символов или он начинается с'django-insecure-', что указывает на то, что он был сгенерирован автоматически Django. Пожалуйста, сгенерируйте длинный и случайныйSECRET_KEY, иначе многие критически важные для безопасности функции Django будут уязвимы к атакам. -
security.W010: У вас есть
django.contrib.sessionsв вашемINSTALLED_APPS, но вы не установилиSESSION_COOKIE_SECUREв значениеTrue. Использование 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.E100:
DEFAULT_HASHING_ALGORITHMдолжно быть'sha1'или'sha256'. -
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'не удалось импортировать.
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), если используется стандартный backend аутентификации, чтобы использовать приложение админки. -
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не должен заканчиваться слешем.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.2/ref/checks/