Рамка проверки системы¶
Фреймворк system check - это набор статических проверок для проверки проектов Django. Он обнаруживает распространенные проблемы и дает подсказки, как их устранить. Фреймворк является расширяемым, поэтому вы можете легко добавлять свои собственные проверки.
Подробнее о том, как добавить свои собственные проверки и интегрировать их с системными проверками Django, смотрите в System check topic guide.
Справочник по 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)[исходный код]¶
Встроенные теги¶
Системные проверки Django организованы с помощью следующих тегов:
admin: Проверяет все объявления сайта администратора.caches: Проверяет конфигурацию, связанную с кэшем.compatibility: Отмечает потенциальные проблемы при обновлении версии.database: Проверяет проблемы конфигурации, связанные с базой данных. Проверки базы данных не запускаются по умолчанию, поскольку они делают больше, чем статический анализ кода, как это делают обычные проверки. Они запускаются только командойmigrateили если вы укажете тегdatabaseпри вызове командыcheck.models: Проверка определений модели, поля и менеджера.security: Проверяет конфигурацию, связанную с безопасностью.signals: Проверяет объявления сигналов и регистрацию обработчиков.staticfiles: Проверяет конфигурациюdjango.contrib.staticfiles.templates: Проверяет конфигурацию, связанную с шаблоном.translation: Проверяет конфигурацию, связанную с переводом.urls: Проверяет конфигурацию URL.
Некоторые чеки могут быть зарегистрированы с несколькими метками.
Проверки основных систем¶
Обратная совместимость¶
Проверка совместимости предупреждает о потенциальных проблемах, которые могут возникнуть после обновления Django.
- 2_0.W001: Ваш шаблон URL
<pattern>имеетroute, который содержит(?P<, начинается с^или заканчивается$. Скорее всего, это было упущением при переходе сurl()наpath().
Кэши¶
Следующие проверки проверяют правильность настройки CACHES:
- caches.E001: Вы должны определить кэш
'default'в настройкахCACHES.
База данных¶
MySQL¶
Если вы используете MySQL, будут выполнены следующие проверки:
- mysql.E001: MySQL не позволяет уникальным
CharFields иметьmax_length> 255. - mysql.W002: MySQL Strict Mode не установлен для подключения к базе данных „<alias>“. См. также Установка sql_mode.
Поля модели¶
- 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.E100:
AutoFields должен установить primary_key=True. - fields.E110:
BooleanFields не принимает нулевые значения. Эта проверка появилась до того, как в Django 2.1. была добавлена поддержка нулевых значений - fields.E120:
CharFields должны определятьmax_lengthатрибут. - fields.E121:
max_lengthдолжно быть положительным целым числом. - fields.W122:
max_lengthигнорируется при использовании с<integer field type>. - fields.E130:
DecimalFields должны определятьdecimal_placesатрибут. - fields.E131:
decimal_placesдолжно быть неотрицательным целым числом. - fields.E132:
DecimalFields должны определятьmax_digitsатрибут. - fields.E133:
max_digitsдолжно быть неотрицательным целым числом. - fields.E134:
max_digitsдолжно быть больше или равноdecimal_places. - fields.E140:
FilePathFields должны иметь либоallow_files, либоallow_folders, установленные в True. - fields.E150:
GenericIPAddressFields не может принимать пустые значения, если нулевые значения не разрешены, так как пустые значения хранятся как нули. - fields.E160: Опции
auto_now,auto_now_addиdefaultявляются взаимоисключающими. Только одна из этих опций может присутствовать. - fields.W161: Исправлено значение по умолчанию.
- fields.W162:
<database>не поддерживает индекс базы данных на<field data type>столбцах. - fields.E900:
IPAddressFieldбыл удален, за исключением поддержки в исторических миграциях. - fields.W900:
IPAddressFieldбыл устаревшим. Его поддержка (за исключением исторических миграций) будет удалена в Django 1.9. Эта проверка появилась в Django 1.7 и 1.8. - fields.W901:
CommaSeparatedIntegerFieldбыл устаревшим. Его поддержка (за исключением исторических миграций) будет удалена в Django 2.0. Эта проверка появилась в Django 1.10 и 1.11. - fields.E901:
CommaSeparatedIntegerFieldудален, за исключением поддержки в исторических миграциях. - fields.W902:
FloatRangeFieldявляется устаревшим и будет удален в Django 3.1.
Поля файлов¶
- 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: Поле
<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>, ноManyToManyFields не поддерживается для этой опции. - 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.W035:
db_table<db_table>используется несколькими моделями:<model list>.
Безопасность¶
Проверки безопасности не делают ваш сайт безопасным. Они не проводят аудит кода, не занимаются обнаружением вторжений и не делают ничего особенно сложного. Скорее, они помогают выполнить автоматизированный контрольный список, не требующий особых усилий. Они помогают вам запомнить простые вещи, которые повышают безопасность вашего сайта.
Некоторые из этих проверок могут не подходить для вашей конкретной конфигурации развертывания. Например, если вы выполняете перенаправление с 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_SSL_REDIRECTне будут иметь эффекта. - security.W002: У вас нет
django.middleware.clickjacking.XFrameOptionsMiddlewareвMIDDLEWARE, поэтому ваши страницы не будут обслуживаться с заголовком'x-frame-options'. Если нет веских причин для того, чтобы ваш сайт обслуживался во фрейме, вы должны рассмотреть возможность включения этого заголовка, чтобы помочь предотвратить атаки clickjacking. - 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: Ваш параметр
SECURE_BROWSER_XSS_FILTERне установлен в значениеTrue, поэтому ваши страницы не будут обслуживаться с заголовком'X-XSS-Protection: 1; mode=block'. Вы должны рассмотреть возможность включения этого заголовка, чтобы активировать XSS-фильтрацию браузера и помочь предотвратить XSS-атаки. - security.W008: Ваш параметр
SECURE_SSL_REDIRECTне установлен в значениеTrue. Если ваш сайт должен быть доступен как через SSL, так и через не-SSL соединения, вам следует установить значениеTrueили настроить балансировщик нагрузки или обратный прокси-сервер для перенаправления всех соединений на HTTPS. - security.W009: Ваш
SECRET_KEYсодержит менее 50 символов или менее 5 уникальных символов. Пожалуйста, сгенерируйте длинный и случайныйSECRET_KEY, иначе многие важные для безопасности функции Django будут уязвимы для атак. - security.W010: У вас есть
django.contrib.sessionsвINSTALLED_APPS, но вы не установилиSESSION_COOKIE_SECUREвTrue. Использование куки-файлов только для защищенных сеансов затрудняет перехват сеансов пользователя снифферами сетевого трафика. - security.W011: У вас
django.contrib.sessions.middleware.SessionMiddlewareвMIDDLEWARE, но вы не установилиSESSION_COOKIE_SECUREвTrue. Использование куки-файлов только для защищенных сеансов затрудняет перехват сеансов пользователя снифферами сетевого трафика. - security.W012:
SESSION_COOKIE_SECUREне установлено вTrue. Использование куки-файла только для защищенных сеансов затрудняет перехват сеансов пользователя программами-снифферами сетевого трафика. - security.W013: У вас есть
django.contrib.sessionsвINSTALLED_APPS, но вы не установилиSESSION_COOKIE_HTTPONLYвTrue. Использование куки сеансаHttpOnlyусложняет атаки межсайтового скриптинга для перехвата сеансов пользователя. - security.W014: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareвMIDDLEWARE, но вы не установилиSESSION_COOKIE_HTTPONLYвTrue. Использование куки сеансаHttpOnlyусложняет атаки межсайтового скриптинга для перехвата сеансов пользователя. - security.W015:
SESSION_COOKIE_HTTPONLYне установлено вTrue. Использование куки сеансаHttpOnlyзатрудняет перехват сеансов пользователя атаками межсайтового скриптинга. - security.W016:
CSRF_COOKIE_SECUREне установлено вTrue. Использование CSRF-куки только с защитой делает более сложным для снифферов сетевого трафика украсть CSRF-токен. - security.W017:
CSRF_COOKIE_HTTPONLYне установлено вTrue. ИспользованиеHttpOnlyCSRF cookie усложняет межсайтовые скриптовые атаки для кражи CSRF токена. Эта проверка удалена в Django 1.11, так какCSRF_COOKIE_HTTPONLYустановка не дает практической пользы. - security.W018: Не следует устанавливать
DEBUGнаTrueпри развертывании. - security.W019: У вас
django.middleware.clickjacking.XFrameOptionsMiddlewareвMIDDLEWARE, ноX_FRAME_OPTIONSне установлен на'DENY'. По умолчанию стоит'SAMEORIGIN', но если нет веской причины для вашего сайта обслуживать другие части себя во фрейме, вам следует изменить его на'DENY'. - security.W020:
ALLOWED_HOSTSне должно быть пустым при развертывании. - security.W021: Вы не установили параметр
SECURE_HSTS_PRELOADв значениеTrue. Без этого ваш сайт не может быть отправлен в список предварительной загрузки браузера.
Сигналы¶
- signals.E001:
<handler>был подключен к сигналу<signal>с ленивой ссылкой на отправителя<app label>.<model>, но приложение<app label>не установлено или не предоставляет модель<model>.
Перевод¶
Следующие проверки выполняются для вашей конфигурации перевода:
- translation.E001: Вы указали недопустимое значение для параметра
LANGUAGE_CODE.
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 app checks¶
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_vertical[n]относится к<field name>, который не является атрибутом<model>. - admin.E020: Значение
filter_vertical[n]/filter_vertical[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>, должны быть уникальными.
InlineModelAdmin¶
Следующие проверки выполняются для любого InlineModelAdmin, который зарегистрирован как инлайн на ModelAdmin.
- admin.E201: Невозможно исключить поле
<field name>, поскольку оно является внешним ключом к родительской модели<app_label>.<model>. - admin.E202:
<model>не имеет отForeignKeyдо<parent model>./<model>имеет более одного отForeignKeyдо<parent model>. - 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), если используется бэкенд auth по умолчанию, чтобы использовать приложение администратора. - 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, чтобы использовать приложение администратора.
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должен быть атрибутом или свойством, а не методом. Игнорирование этого является проблемой безопасности, так как анонимные пользователи будут рассматриваться как аутентифицированные!
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>default должен быть вызываемым, а не экземпляром, чтобы он не был общим для всех экземпляров поля.
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не должен заканчиваться косой чертой.