Система проверки системы¶
Фреймворк системной проверки представляет собой набор статических проверок для проверки проектов Django. Он обнаруживает распространенные проблемы и дает подсказки по их устранению. Платформа расширяема, поэтому вы можете легко добавлять свои собственные проверки.
Подробную информацию о том, как добавлять свои собственные проверки и интегрировать их с системными проверками Django, см. в Руководстве по проверке системы.
Справочник по API¶
Проверить сообщение¶
- class CheckMessage(level, msg, hint=None, obj=None, id=None)¶
Предупреждения и ошибки, возникающие при проверке системы, должны быть экземплярами CheckMessage. Экземпляр инкапсулирует одну отчетную ошибку или предупреждение. Он также предоставляет контекст и подсказки, применимые к сообщению, а также уникальный идентификатор, который используется в целях фильтрации.
Аргументы конструктора:
уровеньСерьезность сообщения. Используйте одно из предопределенных значений:
DEBUG,INFO,WARNING,ERROR,CRITICAL. Если уровень больше или равен «ERROR», то Django предотвратит выполнение команд управления. Сообщения с уровнем нижеERROR(т.е. предупреждения) передаются на консоль, но их можно отключить.сообщениеКороткая (менее 80 символов) строка, описывающая проблему. Строка не должна содержать символы новой строки.
подсказкаОднострочная строка, содержащая подсказку по устранению проблемы. Если подсказка не может быть предоставлена или подсказка очевидна из сообщения об ошибке, подсказку можно опустить или использовать значение None.
объектНеобязательный. Объект, предоставляющий контекст для сообщения (например, модель, в которой была обнаружена проблема). Объект должен быть моделью, полем, менеджером или любым другим объектом, который определяет метод __str__(). Этот метод используется при сообщении обо всех сообщениях, и его результат предшествует сообщению.
идентификаторНеобязательная строка. Уникальный идентификатор проблемы. Идентификаторы должны соответствовать шаблону applabel.X001, где X — это одна из букв CEWID, обозначающая серьезность сообщения («C» для критических сообщений, «E» для ошибок и т. д.). Номер может быть назначен приложением, но он должен быть уникальным внутри этого приложения.
Существуют подклассы, упрощающие создание сообщений с общими уровнями. При их использовании вы можете опустить аргумент «уровень», поскольку он подразумевается в имени класса.
- 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().
Тайники¶
Следующие проверки проверяют правильность настройки параметра CACHES:
caches.E001: Вы должны определить кэш по умолчанию в настройках
CACHES.
База данных¶
MySQL и МарияДБ¶
Если вы используете MySQL или MariaDB, будут выполнены следующие проверки:
mysql.E001: MySQL/MariaDB не позволяет уникальным полям
CharFieldиметьmax_length> 255. Эта проверка была изменена наmysql.W003в Django 3.1, поскольку реальный максимальный размер зависит от многих факторов.mysql.W002: Строгий режим MySQL/MariaDB не установлен для подключения к базе данных
<alias>. См. также Настройка sql_mode.mysql.W003: MySQL/MariaDB может не допускать, чтобы уникальные поля CharField имели длину max_length > 255.
Поля модели¶
fields.E001: имена полей не должны заканчиваться подчеркиванием.
fields.E002: имена полей не должны содержать
"__".fields.E003:
pk— это зарезервированное слово, которое нельзя использовать в качестве имени поля.fields.E004:
choicesmust be an iterable (e.g., a list or tuple).fields.E005:
choicesmust be an iterable returning(actual value, human readable name)tuples.fields.E006:
db_indexдолжен бытьNone,TrueилиFalse.fields.E007: Первичные ключи не должны иметь
null=True.fields.E008: Все валидаторы должны быть вызываемыми.
fields.E009:
max_lengthслишком мал, чтобы вместить самое длинное значение вchoices(символов<count>).fields.E010:
<field>по умолчанию должен быть вызываемым объектом, а не экземпляром, чтобы он не использовался совместно всеми экземплярами поля.fields.E100: ``AutoField``s должен установить Primary_key=True.
fields.E110:
BooleanFields не принимает нулевые значения. Эта проверка появилась до того, как в Django 2.1 была добавлена поддержка нулевых значений.fields.E120:
CharFields должен определить атрибутmax_length.fields.E121:
max_lengthдолжно быть положительным целым числом.fields.W122:
max_lengthигнорируется при использовании с<тип целочисленного поля>.fields.E130:
DecimalFields должен определять атрибутdecimal_places.fields.E131:
decimal_placesдолжно быть неотрицательным целым числом.fields.E132:
DecimalFields должен определять атрибутmax_digits.fields.E133:
max_digitsmust be a non-negative integer.fields.E134:
max_digitsдолжно быть больше или равноdecimal_places.fields.E140: для
FilePathFields либоallow_files, либоallow_foldersдолжно быть установлено значение True.fields.E150:
GenericIPAddressFields cannot accept blank values if null values are not allowed, as blank values are stored as nulls.fields.E160: параметры auto_now, auto_now_add и default являются взаимоисключающими. Может присутствовать только один из этих вариантов.
fields.W161: предоставляется фиксированное значение по умолчанию.
fields.W162:
<база данных>не поддерживает индекс базы данных для столбцов<тип данных поля>.fields.E170: Значение по умолчанию для
BinaryFieldне может быть строкой. Вместо этого используйте байтовое содержимое.fields.E180:
<database>не поддерживаетJSONFields.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:
NullBooleanFieldis deprecated. Support for it (except in historical migrations) will be removed in Django 4.0.fields.W904:
django.contrib.postgres.fields.JSONFieldis deprecated. Support for it (except in historical migrations) will be removed in Django 4.0.
Поля файла¶
fields.E200:
uniqueне является допустимым аргументом дляFileField. Эта проверка удалена в Django 1.11.fields.E201:
primary_keyне является допустимым аргументом дляFileField.fields.E202: аргумент
FileFieldupload_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: Поле
<имя поля>из родительской модели<модель>конфликтует с полем<имя поля>из родительской модели<модель>.models.E006: The field clashes with the field
<field name>from model<model>.models.E007: Поле
<имя поля>имеет имя столбца<имя столбца>, которое используется другим полем.models.E008:
index_togethermust be a list or tuple.models.E009: All
index_togetherelements must be lists or tuples.models.E010:
unique_togetherдолжен быть списком или кортежем.models.E011: Все элементы unique_together должны быть списками или кортежами.
models.E012:
indexes/index_together/unique_togetherrefers to the nonexistent field<field name>.models.E013:
indexes/index_together/unique_togetherrefers to aManyToManyField<field name>, butManyToManyFields are not supported for that option.models.E014:
orderingдолжен быть кортежем или списком (даже если вы хотите упорядочить только по одному полю).models.E015:
упорядочениеотносится к несуществующему полю, связанному полю или поиску<имя поля>.models.E016:
indexes/index_together/unique_togetherrefers to field<field_name>which is not local to model<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: свойство
<имя свойства>конфликтует со связанным средством доступа к полю.models.E026: Модель не может иметь более одного поля с
primary_key=True.models.W027:
<database>не поддерживает проверочные ограничения.models.E028:
db_table<db_table>используется несколькими моделями:<model list>.models.E029: имя индекса
<index>не является уникальным для модели<model>.models.E030: index name
<index>is not unique amongst models:<model list>.models.E031: имя ограничения
<constraint>не является уникальным для модели<model>.models.E032: constraint name
<constraint>is not unique amongst models:<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: You do not have
django.middleware.security.SecurityMiddlewarein yourMIDDLEWAREso theSECURE_HSTS_SECONDS,SECURE_CONTENT_TYPE_NOSNIFF,SECURE_BROWSER_XSS_FILTER,SECURE_REFERRER_POLICY, andSECURE_SSL_REDIRECTsettings will have no effect.security.W002: У вас нет
django.middleware.clickjacking.XFrameOptionsMiddlewareв вашемMIDDLEWARE, поэтому ваши страницы не будут обслуживаться с заголовком'x-frame-options'. Если нет веской причины для показа вашего сайта во фрейме, вам следует рассмотреть возможность включения этого заголовка, чтобы предотвратить атаки кликджекинга.security.W003: Похоже, вы не используете встроенную в Django защиту от подделки межсайтовых запросов через промежуточное программное обеспечение (
django.middleware.csrf.CsrfViewMiddlewareотсутствует в вашем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: Your
SECURE_BROWSER_XSS_FILTERsetting is not set toTrue, so your pages will not be served with an'X-XSS-Protection: 1; mode=block'header. You should consider enabling this header to activate the browser’s XSS filtering and help prevent XSS attacks. This check is removed in Django 3.0 as theX-XSS-Protectionheader is no longer honored by modern browsers.security.W008: Для параметра
SECURE_SSL_REDIRECTне установлено значениеTrue. Если ваш сайт не должен быть доступен как по SSL, так и по не-SSL-соединениям, вы можете либо установить для этого параметра значение «True», либо настроить балансировщик нагрузки или обратный прокси-сервер для перенаправления всех соединений на HTTPS.security.W009: Your
SECRET_KEYhas less than 50 characters or less than 5 unique characters. Please generate a long and randomSECRET_KEY, otherwise many of Django’s security-critical features will be vulnerable to attack.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 сеанса HttpOnly затрудняет перехват пользовательских сеансов атаками с использованием межсайтовых сценариев.security.W014: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE, но вы не установили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: У вас есть
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_ALGORITHMmust be'sha1'or'sha256'.
Сигналы¶
signals.E001:
<handler>был подключен к сигналу<signal>с ленивой ссылкой на отправителя<app label>.<model>, но приложение<app label>не установлено или не предоставляет модель<model>.
Шаблоны¶
Следующие проверки проверяют правильность настройки параметра TEMPLATES:
Перевод¶
В вашей конфигурации перевода выполняются следующие проверки:
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, заканчивающимся на$. Удалите доллар из маршрута, чтобы избежать проблем, включая URL-адреса.urls.W002: Ваш шаблон URL
<шаблон>имеетмаршрут, начинающийся с/. Удалите эту косую черту, так как она не нужна. Если этот шаблон предназначен дляinclude(), убедитесь, что шаблонinclude()имеет завершающий/.urls.W003: Ваш шаблон URL
<шаблон>имеетимя, включая:. Удалите двоеточие, чтобы избежать неоднозначных ссылок на пространство имен.urls.E004: Ваш шаблон URL
<шаблон>недействителен. Убедитесь, что 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.
Следующие проверки выполняются для любого ModelAdmin (или подкласса), зарегистрированного на сайте администратора:
admin.E001: значение
raw_id_fieldsдолжно быть списком или кортежем.admin.E002: The value of
raw_id_fields[n]refers to<field name>, which is not an attribute of<model>.admin.E003: значение
raw_id_fields[n]должно быть внешним ключом или полем «многие-ко-многим».admin.E004: значение поля должно быть списком или кортежем.
admin.E005: указаны как
fieldsets, так иfields.admin.E006: Значение поля содержит повторяющиеся поля.
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]cannot include theManyToManyField<field name>, because that field manually specifies a relationship model.admin.E014: Значение
excludeдолжно быть списком или кортежем.admin.E015: Значение
excludeсодержит повторяющиеся поля.admin.E016: значение form должно наследовать от BaseModelForm.
admin.E017: Значение filter_vertical должно быть списком или кортежем.
admin.E018: значение filter_horizontal должно быть списком или кортежем.
admin.E019: The value of
filter_vertical[n]/filter_horizontal[n]refers to<field name>, which is not an attribute of<model>.admin.E020: Значение
filter_vertical[n]/filter_horizontal[n]должно быть полем «многие ко многим».admin.E021: значение
radio_fieldsдолжно быть словарем.admin.E022: The value of
radio_fieldsrefers to<field name>, which is not an attribute of<model>.admin.E023: Значение
radio_fieldsотносится к<имя поля>, которое не является экземпляромForeignKeyи не имеет определенияchoices.admin.E024: Значение
radio_fields[<имя поля>]должно быть либоadmin.HORIZONTAL, либоadmin.VERTICAL.admin.E025: значение
view_on_siteдолжно быть либо вызываемым, либо логическим значением.admin.E026: значение prepopulated_fields должно быть словарем.
admin.E027: The value of
prepopulated_fieldsrefers to<field name>, which is not an attribute of<model>.admin.E028: Значение
prepopulated_fieldsотносится к<имя поля>, которое не должно быть полемDateTimeField,ForeignKey,OneToOneFieldилиManyToManyField.admin.E029: значение
prepopulated_fields[<имя поля>]должно быть списком или кортежем.admin.E030: The value of
prepopulated_fieldsrefers to<field name>, which is not an attribute of<model>.admin.E031: значение
orderingдолжно быть списком или кортежем.admin.E032: значение
orderingимеет случайный маркер упорядочения?, но содержит также и другие поля.admin.E033: The value of
orderingrefers to<field name>, which is not an attribute of<model>.admin.E034: значение
readonly_fieldsдолжно быть списком или кортежем.admin.E035: The value of
readonly_fields[n]is not a callable, an attribute of<ModelAdmin class>, or an attribute of<model>.admin.E036: значение autocomplete_fields должно быть списком или кортежем.
admin.E037: The value of
autocomplete_fields[n]refers to<field name>, which is not an attribute of<model>.admin.E038: значение
autocomplete_fields[n]должно быть внешним ключом или полем «многие-ко-многим».admin.E039: администратор модели
<model>должен быть зарегистрирован, чтобы на него ссылался<modeladmin>.autocomplete_fields.admin.E040:
<modeladmin>должен определитьsearch_fields, поскольку на него ссылается<other_modeladmin>.autocomplete_fields.
Администратор модели¶
Следующие проверки выполняются для любого 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: The value of
list_display[n]refers to<label>, which is not a callable, an attribute of<ModelAdmin class>, or an attribute or method on<model>.admin.E109: The value of
list_display[n]must not be aManyToManyFieldfield.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: The value of
list_editable[n]refers to<label>, which is not an attribute of<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]`` относится к
<имя поля>, которое нельзя редактировать через администратора.admin.E126: значение search_fields должно быть списком или кортежем.
admin.E127: Значение
date_hierarchyотносится к<имя поля>, которое не относится к полю.admin.E128: Значение date_hierarchy должно быть DateField или DateTimeField.
admin.E129:
<modeladmin>должен определить методhas_<foo>_permission()для действия<action>.admin.E130: атрибуты
__name__действий, определенные в<modeladmin>, должны быть уникальными. Имя<имя>не уникально.
InlineModelAdmin¶
Следующие проверки выполняются для любого InlineModelAdmin, который зарегистрирован как встроенный в ModelAdmin.
admin.E201: невозможно исключить поле
<имя поля>, поскольку оно является внешним ключом родительской модели<app_label>.<model>.admin.E202:
<model>не имеетForeignKeyдля<родительской модели>./<model>имеет более одногоForeignKeyдля<родительской модели>. Вы должны указать атрибут 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, используя поле типа контента<имя поля>и поле идентификатора объекта<имя поля>.
Админсайт¶
Следующие проверки выполняются для стандартного 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.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 символов.
типы контента¶
Следующие проверки выполняются, когда модель содержит GenericForeignKey или GenericRelation:
contenttypes.E001: Идентификатор объекта GenericForeignKey ссылается на несуществующее поле
<field>.contenttypes.E002: Тип контента GenericForeignKey ссылается на несуществующее поле
<field>.contenttypes.E003:
<field>не являетсяForeignKey.contenttypes.E004:
<field>не являетсяForeignKeyдляcontenttypes.ContentType.contenttypes.E005: Названия моделей должны содержать не более 100 символов.
постгрес¶
Следующие проверки выполняются в полях модели django.contrib.postgres:
postgres.E001: Базовое поле массива содержит ошибки: …
postgres.E002: Базовое поле массива не может быть связанным полем.
postgres.E003:
<field>по умолчанию должен быть вызываемым, а не экземпляром, чтобы оно не было общим для всех экземпляров поля. Эта проверка была изменена наfields.E010в Django 3.1.
сайты¶
Следующие проверки выполняются для любой модели с использованием CurrentSiteManager:
sites.E001:
CurrentSiteManagerне удалось найти поле с именем<имя поля>.sites.E002:
CurrentSiteManagerне может использовать<field>, поскольку оно не является внешним ключом или полем типа «многие-ко-многим».
статические файлы¶
Следующие проверки проверяют правильность настройки django.contrib.staticfiles:
staticfiles.E001: Параметр
STATICFILES_DIRSне является кортежем или списком.staticfiles.E002: Параметр
STATICFILES_DIRSне должен содержать параметрSTATIC_ROOT.staticfiles.E003: префикс
<prefix>в настройкеSTATICFILES_DIRSне должен заканчиваться косой чертой.