Система проверок
Система проверок — это набор статических проверок для валидации проектов 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)[источник]
Основные проверки системы
Асинхронная поддержка
Следующие проверки позволяют проверить настройки асинхронной поддержки:
-
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: В параметре
CACHESнеобходимо определить кэш'default'. -
caches.W002: Конфигурация
<cache>может сделать ваш кэш доступным извне или привести к повреждению данных, поскольку его параметрLOCATIONсовпадает с/находится внутри/содержитMEDIA_ROOT/STATIC_ROOT/STATICFILES_DIRS. -
caches.W003: Путь
LOCATIONкэша<cache>является относительным. Вместо него используйте абсолютный путь.
База данных
MySQL и MariaDB
При использовании MySQL или MariaDB будут выполнены следующие проверки:
-
mysql.E001: MySQL/MariaDB не позволяет задавать уникальным
CharFieldзначениеmax_length> 255. В Django 3.1 эта проверка была заменена наmysql.W003, поскольку фактический максимальный размер зависит от многих факторов. -
mysql.W002: Для подключения к базе данных
<alias>не включён строгий режим MySQL/MariaDB. См. также Настройка 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.E011:
<database>не поддерживает выражения в значениях базы данных по умолчанию (db_default). -
fields.E012:
<expression>нельзя использовать вdb_default. -
fields.E013:
CompositePrimaryKeyдолжно называтьсяpk. -
fields.E100: Для
AutoFieldнеобходимо задать primary_key=True. -
fields.E110:
BooleanFieldне принимают значения null. Эта проверка появилась до добавления поддержки значений null в Django 2.1. -
fields.E120: Для
CharFieldнеобходимо определить атрибутmax_length. -
fields.E121:
max_lengthдолжно быть положительным целым числом. -
fields.W122:
max_lengthигнорируется при использовании с<integer field type>. -
fields.E130: Для
DecimalFieldнеобходимо определить атрибутdecimal_places. -
fields.E131:
decimal_placesдолжно быть неотрицательным целым числом. -
fields.E132: Для
DecimalFieldнеобходимо определить атрибутmax_digits. -
fields.E133:
max_digitsдолжно быть положительным целым числом. -
fields.E134:
max_digitsдолжно быть больше или равноdecimal_places. -
fields.E140: Для
FilePathFieldдолжно быть установлено значение True либо уallow_files, либо уallow_folders. -
fields.E150: У
GenericIPAddressFieldне может бытьblank=True, если заданоnull=False, поскольку пустые значения хранятся как null. -
fields.E160: Параметры
auto_now,auto_now_addиdefaultвзаимоисключающие. Можно указать только один из них. - fields.W161: Указано фиксированное значение по умолчанию.
-
fields.W162:
<database>не поддерживает создание индекса базы данных по столбцам<field data type>. -
fields.W163:
<database>не поддерживает комментарии к столбцам (db_comment). -
fields.E170: Значение
defaultуBinaryFieldне может быть строкой. Вместо этого используйте содержимое в байтах. -
fields.E180:
<database>не поддерживаетJSONField. -
fields.E190:
<database>не поддерживает параметры сортировки базы данных для<field_type>. -
fields.E220:
<database>не поддерживаетGeneratedField. -
fields.E221:
<database>не поддерживает непостоянныеGeneratedField. -
fields.E222:
<database>не поддерживает постоянныеGeneratedField. -
fields.E223: Ошибки в
GeneratedField.output_field: … -
fields.W224: Предупреждения для
GeneratedField.output_field: … -
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.W905:
django.contrib.postgres.fields.CICharFieldустарело. Поддержка будет удалена в Django 5.1, за исключением исторических миграций. Эта проверка появилась в Django 4.2 и 5.0. -
fields.E905:
django.contrib.postgres.fields.CICharFieldудалено, кроме поддержки в исторических миграциях. -
fields.W906:
django.contrib.postgres.fields.CIEmailFieldустарело. Поддержка будет удалена в Django 5.1, за исключением исторических миграций. Эта проверка появилась в Django 4.2 и 5.0. -
fields.E906:
django.contrib.postgres.fields.CIEmailFieldудалено, кроме поддержки в исторических миграциях. -
fields.W907:
django.contrib.postgres.fields.CITextFieldустарело. Поддержка будет удалена в Django 5.1, за исключением исторических миграций. Эта проверка появилась в Django 4.2 и 5.0. -
fields.E907:
django.contrib.postgres.fields.CITextFieldудалено, кроме поддержки исторических миграций.
Поля файлов
-
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: Имя столбца
<column name>поля<field name>уже используется другим полем. -
models.E008:
index_togetherдолжно быть списком или кортежем. Эта проверка появилась до Django 5.1. -
models.E009: Все элементы
index_togetherдолжны быть списками или кортежами. Эта проверка появилась до Django 5.1. -
models.E010:
unique_togetherдолжно быть списком или кортежем. -
models.E011: Все элементы
unique_togetherдолжны быть списками или кортежами. -
models.E012:
constraints/indexes/unique_togetherссылается на несуществующее поле<field name>. -
models.E013:
constraints/indexes/unique_togetherссылается наManyToManyField<field name>, но для этого параметраManyToManyFieldне поддерживаются. -
models.E014:
orderingдолжно быть кортежем или списком (даже если требуется сортировка только по одному полю). -
models.E015:
orderingссылается на несуществующее поле, связанное поле или поиск<field name>. -
models.E016:
constraints/indexes/unique_togetherссылается на поле<field_name>, которое не относится непосредственно к модели<model>. -
models.E017: Прокси-модель
<model>содержит поля модели. -
models.E018: Автоматически сгенерированное имя столбца для поля
<field>слишком длинное. Максимальная длина для базы данных<alias>составляет<maximum length>. -
models.E019: Автоматически сгенерированное имя столбца для поля M2M
<M2M field>слишком длинное. Максимальная длина для базы данных<alias>составляет<maximum length>. -
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.E042:
<field name>нельзя включить в составной первичный ключ. -
models.W042: Используется автоматически созданный первичный ключ, поскольку тип первичного ключа не задан; по умолчанию это
django.db.models.AutoField. Эта проверка появилась в Django 3.2–5.2. -
models.W043:
<database>не поддерживает индексы по выражениям. -
models.W044:
<database>не поддерживает уникальные ограничения по выражениям. -
models.W045: Ограничение проверки
<constraint>содержит выражениеRawSQL()и не будет проверяться приfull_clean()модели. -
models.W046:
<database>не поддерживает комментарии к таблицам (db_table_comment). -
models.W047:
<database>не поддерживает уникальные ограничения с различающимися значениями null. -
models.E048:
constraints/indexes/unique_togetherссылается наCompositePrimaryKey<field name>, но для этого параметраCompositePrimaryKeyне поддерживаются.
Команды управления
Следующие проверки позволяют убедиться, что пользовательские команды управления настроены правильно:
-
commands.E001: Команды
migrateиmakemigrationsдолжны иметь одинаковыйautodetector.
Безопасность
Проверки безопасности не делают ваш сайт защищённым. Они не проводят аудит кода, не обнаруживают вторжения и не выполняют ничего особенно сложного. Вместо этого они помогают автоматически выполнить простой контрольный список проверок, который может помочь повысить безопасность вашего сайта.
Некоторые из этих проверок могут не подходить для вашей конфигурации развёртывания. Например, если перенаправление с HTTP на HTTPS выполняется на балансировщике нагрузки, вас будет раздражать постоянное предупреждение о том, что не включён параметр SECURE_SSL_REDIRECT. Используйте SILENCED_SYSTEM_CHECKS, чтобы отключить ненужные проверки.
Следующие проверки выполняются, если используется параметр check --deploy:
-
security.W001: В
MIDDLEWAREотсутствуетdjango.middleware.security.SecurityMiddleware, поэтому параметрыSECURE_HSTS_SECONDS,SECURE_CONTENT_TYPE_NOSNIFF,SECURE_REFERRER_POLICY,SECURE_CROSS_ORIGIN_OPENER_POLICYиSECURE_SSL_REDIRECTне будут действовать. -
security.W002: В
MIDDLEWAREотсутствуетdjango.middleware.clickjacking.XFrameOptionsMiddleware, поэтому ваши страницы не будут передаваться с заголовком'x-frame-options'. Если нет веской причины показывать ваш сайт во фрейме, рассмотрите возможность включения этого заголовка, чтобы предотвратить атаки clickjacking. -
security.W003: Похоже, вы не используете встроенную в Django защиту от подделки межсайтовых запросов с помощью промежуточного ПО (
django.middleware.csrf.CsrfViewMiddlewareотсутствует вMIDDLEWARE). Включение промежуточного ПО — наиболее надёжный способ гарантировать, что в защите не останется уязвимостей. -
security.W004: Для параметра
SECURE_HSTS_SECONDSне задано значение. Если весь сайт доступен только через SSL, можно задать значение и включить строгую транспортную безопасность HTTP. Сначала обязательно прочитайте документацию: неосторожное включение HSTS может привести к серьёзным и необратимым проблемам. -
security.W005: Для параметра
SECURE_HSTS_INCLUDE_SUBDOMAINSне задано значениеTrue. Без этого ваш сайт потенциально уязвим для атак через незащищённое соединение с поддоменом. Устанавливайте значениеTrue, только если уверены, что все поддомены вашего домена должны обслуживаться исключительно через SSL. -
security.W006: Для параметра
SECURE_CONTENT_TYPE_NOSNIFFзадано значение, отличное отTrue, поэтому ваши страницы не будут передаваться с заголовком'X-Content-Type-Options: nosniff'. Рассмотрите возможность включения этого заголовка, чтобы браузер не определял типы содержимого неверно. -
security.W007: Для параметра
SECURE_BROWSER_XSS_FILTERзадано значение, отличное отTrue, поэтому ваши страницы не будут передаваться с заголовком'X-XSS-Protection: 1; mode=block'. Рассмотрите возможность включения этого заголовка, чтобы активировать фильтрацию XSS в браузере и помочь предотвратить XSS-атаки. Эта проверка удалена в Django 3.0, посколькуX-XSS-Protectionзаголовок больше не поддерживается современными браузерами. -
security.W008: Для параметра
SECURE_SSL_REDIRECTзадано значение, отличное отTrue. Если ваш сайт не должен быть доступен как через SSL, так и через незащищённые соединения, можно установить для этого параметра значениеTrueлибо настроить балансировщик нагрузки или обратный прокси-сервер для перенаправления всех соединений на HTTPS. -
security.W009: Значение параметра
SECRET_KEYсодержит менее 50 символов, менее 5 уникальных символов или имеет префикс'django-insecure-', указывающий на то, что оно было сгенерировано Django автоматически. Создайте длинное случайное значение, иначе многие критически важные для безопасности функции 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. Использование cookie сеанса с атрибутомHttpOnlyзатрудняет перехват пользовательских сеансов при межсайтовых скриптовых атаках. -
security.W014: В
MIDDLEWAREестьdjango.contrib.sessions.middleware.SessionMiddleware, но дляSESSION_COOKIE_HTTPONLYне задано значениеTrue. Использование cookie сеанса с атрибутомHttpOnlyзатрудняет перехват пользовательских сеансов при межсайтовых скриптовых атаках. -
security.W015: Для
SESSION_COOKIE_HTTPONLYзадано значение, отличное отTrue. Использование cookie сеанса с атрибутомHttpOnlyзатрудняет перехват пользовательских сеансов при межсайтовых скриптовых атаках. -
security.W016: Для
CSRF_COOKIE_SECUREзадано значение, отличное отTrue. Использование cookie CSRF, доступного только через защищённое соединение, затрудняет кражу токена CSRF средствами анализа сетевого трафика. -
security.W017: Для
CSRF_COOKIE_HTTPONLYзадано значение, отличное отTrue. Использование cookie CSRF с атрибутомHttpOnlyзатрудняет кражу токена CSRF при межсайтовых скриптовых атаках. Эта проверка удалена в 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.E024: Для параметра
SECURE_CROSS_ORIGIN_OPENER_POLICYзадано недопустимое значение. -
security.W025: Значение параметра
SECRET_KEY_FALLBACKS[n]содержит менее 50 символов, менее 5 уникальных символов или имеет префикс'django-insecure-', указывающий на то, что оно было сгенерировано Django автоматически. Создайте длинное случайное значение, иначе многие критически важные для безопасности функции Django будут уязвимы для атак. -
security.E026: Параметр CSP
<SETTING_NAME>должен быть словарём (получено<value>).
Следующие проверки проверяют правильность настройки параметров, связанных с безопасностью:
-
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: В параметре
TEMPLATESзадано'APP_DIRS': True, но также указан параметр'loaders'вOPTIONS. УдалитеAPP_DIRSили параметр'loaders'. Эта проверка удалена в Django 5.1, поскольку системные проверки теперь могут вместо этого вызыватьImproperlyConfigured. -
templates.E002:
string_if_invalidвTEMPLATESOPTIONSдолжен быть строкой, получено:{value}({type}). -
templates.E003:
<name>используется для нескольких модулей тегов шаблонов:<module list>. В Django 4.1.2 эта проверка была изменена наtemplates.W003. -
templates.W003:
<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: Пользовательское представление
'path.to.view'дляhandlerXXXпринимает неверное количество аргументов (…). -
urls.E008: Не удалось импортировать пользовательское представление
'path.to.view'дляhandlerXXX. -
urls.E009: В шаблоне URL
<pattern>указано недопустимое представление: передайте<view>.as_view()вместо<view>. -
urls.W010: В шаблоне URL
<pattern>содержится несопоставленный<angle bracket>.
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]/filter_horizontal[n]/filter_vertical[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]ссылается на<field_name>, которое не является вызываемым объектом, атрибутом<ModelAdmin class>или атрибутом<model>. -
admin.E036: Значение
autocomplete_fieldsдолжно быть списком или кортежем. -
admin.E037: Значение
autocomplete_fields[n]ссылается на<field name>, которое не является полем<model>. -
admin.E038: Значение
autocomplete_fields[n]должно быть внешним ключом или полем «многие ко многим». -
admin.E039: Для ссылки из
<modeladmin>.autocomplete_fieldsнеобходимо зарегистрировать администратора модели<model>. -
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]не должно быть полем «многие ко многим» или обратным внешним ключом. -
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: Для использования приложения администратора в
TEMPLATESдолжен быть настроен экземплярdjango.template.backends.django.DjangoTemplates. -
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 символов. -
auth.E013: Чтобы использовать
django.contrib.auth.middleware.LoginRequiredMiddleware, необходимо определитьdjango.contrib.auth.middleware.AuthenticationMiddlewareв MIDDLEWARE раньше него.
contenttypes
Следующие проверки выполняются, если модель содержит GenericForeignKey или GenericRelation:
-
contenttypes.E001: Идентификатор объекта
GenericForeignKeyссылается на несуществующее поле<field>. -
contenttypes.E002: Тип содержимого
GenericForeignKeyссылается на несуществующее поле<field>. -
contenttypes.E003:
<field>не являетсяForeignKey. -
contenttypes.E004:
<field>не являетсяForeignKeyдляcontenttypes.ContentType. - contenttypes.E005: Имена моделей должны содержать не более 100 символов.
postgres
Следующие проверки выполняются для полей моделей, индексов и ограничений django.contrib.postgres:
- postgres.E001: Ошибки в базовом поле массива: …
- postgres.E002: Базовое поле массива не может быть связанным полем.
-
postgres.E003: Значение по умолчанию
<field>должно быть вызываемым объектом, а не экземпляром, чтобы оно не использовалось совместно всеми экземплярами поля. В Django 3.1 эта проверка была заменена наfields.E010. - postgres.W004: Предупреждения в базовом поле массива: …
-
postgres.E005: Для использования
<django.contrib.postgres feature>необходимо указать'django.contrib.postgres'вINSTALLED_APPS.
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, не существует. -
staticfiles.E005: В настройке
STORAGESдолжно быть определено хранилищеstaticfiles.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/ref/checks/