Система проверки фреймворка
Система проверки фреймворка — это набор статических проверок для валидации проектов 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: Проверки объявлений сигналов и регистрации обработчиков. -
staticfiles: Проверки конфигурацииdjango.contrib.staticfiles. -
templates: Проверки конфигурации, связанной с шаблонами. -
translation: Проверки конфигурации, связанной с переводом. -
urls: Проверки конфигурации URL.
Некоторые проверки могут быть зарегистрированы с несколькими тегами.
Добавлен тег async_support.
Проверки database теперь выполняются только для псевдонимов баз данных, указанных с помощью опции check --database.
Основные системные проверки
Поддержка асинхронности
Следующие проверки проверяют вашу настройку для поддержки асинхронности:
-
async.E001: Вы не должны устанавливать переменную окружения
DJANGO_ALLOW_ASYNC_UNSAFEв развертывании. Это отключает защиту от асинхронных небезопасных действий.
Обратная совместимость
Проверки совместимости предупреждают о потенциальных проблемах, которые могут возникнуть после обновления Django.
-
2_0.W001: Ваш шаблон URL
<pattern>имеетrouteсодержащий(?P<, начинающийся с^или заканчивающийся на$. Это, вероятно, произошло при миграции изurl()вpath().
Кэши
Следующие проверки проверяют, что ваше значение CACHES настроены правильно:
-
caches.E001: Вы должны определить кэш
'default'в настройкеCACHES.
База данных
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.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: Аргумент
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>из модели<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:
indexes/index_together/unique_togetherссылается на несуществующее поле<field name>. -
models.E013:
indexes/index_together/unique_togetherссылается наManyToManyField<field name>, ноManyToManyFieldне поддерживаются для этого параметра. -
models.E014:
orderingдолжно быть кортежем или списком (даже если вы хотите упорядочить только по одному полю). -
models.E015:
orderingссылается на несуществующее поле, связанное поле или поиск<field name>. -
models.E016:
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>не поддерживает откладываемые уникальные ограничения.
Безопасность
Проверки безопасности не делают ваш сайт безопасным. Они не проверяют код, не выполняют обнаружение вторжений и не выполняют ничего особенно сложного. Скорее, они помогают выполнить автоматическую проверку простых вещей, которые могут помочь улучшить безопасность вашего сайта.
Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если вы выполняете перенаправление 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: Похоже, вы не используете встроенную защиту от межсайтовых поддельных запросов (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 уникальных символов. Пожалуйста, сгенерируйте длинный и случайныйSECRET_KEY, в противном случае многие критически важные для безопасности функции Django будут уязвимы для атак. -
security.W010: В вашем
INSTALLED_APPSприсутствуетdjango.contrib.sessions, но вы не установилиSESSION_COOKIE_SECUREвTrue. Использование безопасного cookie сессии затрудняет перехват сеансов пользователей программами-шпионами. -
security.W011: В вашем
MIDDLEWAREприсутствуетdjango.contrib.sessions.middleware.SessionMiddleware, но вы не установилиSESSION_COOKIE_SECUREвTrue. Использование безопасного cookie сессии затрудняет перехват сеансов пользователей программами-шпионами. -
security.W012:
SESSION_COOKIE_SECUREне установлено вTrue. Использование безопасного cookie сессии затрудняет перехват сеансов пользователей программами-шпионами. -
security.W013: В вашем
INSTALLED_APPSприсутствуетdjango.contrib.sessions, но вы не установилиSESSION_COOKIE_HTTPONLYвTrue. ИспользованиеHttpOnlycookie сессии затрудняет перехват сеансов пользователей при атаках XSS. -
security.W014: В вашем
MIDDLEWAREприсутствуетdjango.contrib.sessions.middleware.SessionMiddleware, но вы не установилиSESSION_COOKIE_HTTPONLYвTrue. ИспользованиеHttpOnlycookie сессии затрудняет перехват сеансов пользователей при атаках XSS. -
security.W015:
SESSION_COOKIE_HTTPONLYне установлено вTrue. ИспользованиеHttpOnlycookie сессии затрудняет перехват сеансов пользователей при атаках XSS. -
security.W016:
CSRF_COOKIE_SECUREне установлено вTrue. Использование безопасного cookie CSRF затрудняет перехват токена CSRF программами-шпионами. -
security.W017:
CSRF_COOKIE_HTTPONLYне установлено вTrue. ИспользованиеHttpOnlycookie CSRF затрудняет перехват токена CSRF при атаках XSS. *Эта проверка удалена в Django 1.11, так как настройка*CSRF_COOKIE_HTTPONLY*не предоставляет практической пользы.* -
security.W018: В развертывании не должно быть установлено
DEBUGв значениеTrue. -
security.W019: В вашем
MIDDLEWAREприсутствуетdjango.middleware.clickjacking.XFrameOptionsMiddleware, но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'.
Сигналы
-
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>и поля идентификатора объекта<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>, так как это не поле внешнего ключа или многие-ко-многим.
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.1/ref/checks/