Система проверки фреймворка
Система проверки фреймворка — это набор статических проверок для валидации проектов Django. Она обнаруживает распространённые проблемы и предлагает подсказки по их исправлению. Фреймворк расширяем, поэтому вы легко можете добавить свои собственные проверки.
Подробности о том, как добавить свои собственные проверки и интегрировать их с системами проверок Django, см. в руководстве по системе проверок.
Ссылка на API
CheckMessage
-
class CheckMessage(level, msg, hint=None, obj=None, id=None)[source]
Предупреждения и ошибки, генерируемые системами проверок, должны быть экземплярами CheckMessage. Экземпляр представляет собой отдельную ошибку или предупреждение для отчёта. Он также предоставляет контекст и подсказки, применимые к сообщению, и уникальный идентификатор, используемый для фильтрации.
Аргументы конструктора:
-
level - Уровень важности сообщения. Используйте одно из предопределённых значений:
DEBUG,INFO,WARNING,ERROR,CRITICAL. Если уровень не меньшеERROR, Django не позволит выполнить команды управления. Сообщения с уровнем нижеERROR(т.е. предупреждения) выводятся в консоль, но могут быть отключены. -
msg - Короткая строка (менее 80 символов), описывающая проблему. Строка не должна содержать переводы строк.
-
hint - Строка в одну строку с подсказкой по исправлению проблемы. Если подсказку предоставить невозможно или она очевидна из сообщения об ошибке, подсказку можно опустить или использовать значение
None. -
obj - Необязательно. Объект, предоставляющий контекст для сообщения (например, модель, в которой была обнаружена проблема). Объект должен быть моделью, полем, менеджером или любым другим объектом, который определяет метод
__str__(в Python 2 необходимо определить метод__unicode__). Метод используется при отчёте обо всех сообщениях, и его результат предшествует сообщению. -
id - Необязательная строка. Уникальный идентификатор проблемы. Идентификаторы должны соответствовать шаблону
applabel.X001, гдеX— одна из буквCEWID, указывающая на уровень важности сообщения (Cдля критических,Eдля ошибок). Число может быть назначено приложением, но должно быть уникальным в пределах этого приложения.
Существуют подклассы для упрощения создания сообщений с общими уровнями. При их использовании вы можете опустить аргумент level, так как он подразумевается именем класса.
-
class Debug(msg, hint=None, obj=None, id=None)[source]
-
class Info(msg, hint=None, obj=None, id=None)[source]
-
class Warning(msg, hint=None obj=None, id=None)[source]
-
class Error(msg, hint=None, obj=None, id=None)[source]
-
class Critical(msg, hint=None, obj=None, id=None)[source]
Встроенные теги
-
admin: Проверки любых объявлений административной панели. -
caches: Проверки конфигурации кэша. -
compatibility: Выделение потенциальных проблем с обновлением версии. -
database: Проверки проблем с конфигурацией базы данных. Проверки баз данных не выполняются по умолчанию, так как они выполняют больше, чем статический анализ кода, как обычные проверки. Они выполняются только командойmigrateили если вы укажете тегdatabaseпри вызове командыcheck. -
models: Проверки определений моделей, полей и менеджеров. -
security: Проверки конфигурации безопасности. -
signals: Проверки объявлений сигналов и регистрации обработчиков. -
templates: Проверки конфигурации шаблонов. -
urls: Проверки конфигурации URL.
Некоторые проверки могут быть зарегистрированы с несколькими тегами.
Основные проверки системы
Обратная совместимость
Следующие проверки предупреждают пользователя о потенциальных проблемах, которые могут возникнуть в результате обновления версии.
- 1_6.W001: Некоторые модульные тесты проекта могут выполняться не так, как ожидается. Эта проверка была удалена в Django 1.8 из-за ложных срабатываний.
-
1_6.W002:
BooleanFieldне имеет значения по умолчанию. Эта проверка была удалена в Django 1.8 из-за ложных срабатываний. -
1_7.W001: Django 1.7 изменил глобальные значения по умолчанию для
MIDDLEWARE_CLASSES.django.contrib.sessions.middleware.SessionMiddleware,django.contrib.auth.middleware.AuthenticationMiddleware, иdjango.contrib.messages.middleware.MessageMiddlewareбыли удалены из значений по умолчанию. Если вашему проекту нужны эти middleware, вы должны настроить данное значение. Эта проверка была удалена в Django 1.9. -
1_8.W001: Самостоятельные настройки
TEMPLATE_*устарели в Django 1.8, и словарьTEMPLATESимеет приоритет. Вы должны поместить значения следующих настроек в словарьTEMPLATESпо умолчанию:TEMPLATE_DIRS,TEMPLATE_CONTEXT_PROCESSORS,TEMPLATE_DEBUG,TEMPLATE_LOADERS,TEMPLATE_STRING_IF_INVALID. -
1_10.W001: Настройка
MIDDLEWARE_CLASSESустарела в Django 1.10, и настройкаMIDDLEWAREимеет приоритет. Поскольку вы установилиMIDDLEWARE, значениеMIDDLEWARE_CLASSESигнорируется.
Кэши
Следующие проверки проверяют, что ваша настройка CACHES настроена правильно:
-
caches.E001: Вы должны определить кэш
'default'в настройкеCACHES.
База данных
MySQL
Если вы используете MySQL, будут выполнены следующие проверки:
-
mysql.E001: MySQL не допускает уникальных
CharFieldсmax_length> 255. - mysql.W002: Режим жёсткой проверки MySQL не установлен для подключения к базе данных ‘<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.E100:
AutoFieldдолжны установить primary_key=True. -
fields.E110:
BooleanFieldне принимают значения null. -
fields.E120:
CharFieldдолжны определить атрибутmax_length. -
fields.E121:
max_lengthдолжно быть положительным целым числом. -
fields.W122:
max_lengthигнорируется при использовании сIntegerField. -
fields.E130:
DecimalFieldдолжны определить атрибутdecimal_places. -
fields.E131:
decimal_placesдолжно быть неотрицательным целым числом. -
fields.E132:
DecimalFieldдолжны определить атрибутmax_digits. -
fields.E133:
max_digitsдолжно быть неотрицательным целым числом. -
fields.E134:
max_digitsдолжно быть больше или равноdecimal_places. -
fields.E140:
FilePathFieldдолжны иметь установленным либоallow_files, либоallow_foldersв True. -
fields.E150:
GenericIPAddressFieldне могут принимать пустые значения, если null-значения запрещены, так как пустые значения хранятся как null. -
fields.E160: Опции
auto_now,auto_now_add, иdefaultвзаимоисключающие. Должна присутствовать только одна. - fields.W161: Предоставлено исправленное значение по умолчанию.
-
fields.E900:
IPAddressFieldудален, кроме поддержки в исторических миграциях. -
fields.W900:
IPAddressFieldустарел. Поддержка будет удалена в Django 1.9 (кроме исторических миграций). Эта проверка появилась в Django 1.7 и 1.8. -
fields.W901:
CommaSeparatedIntegerFieldустарел. Поддержка будет удалена в Django 2.0 (кроме исторических миграций).
Файловые поля
-
fields.E200:
uniqueне является допустимым аргументом дляFileField. Эта проверка удалена в Django 1.11. -
fields.E201:
primary_keyне является допустимым аргументом дляFileField. -
fields.E202: Аргумент
upload_toдляFileFieldдолжен быть относительным, а не абсолютным путем. -
fields.E210: Нельзя использовать
ImageField, так как Pillow не установлен.
Связанные поля
Модели
-
models.E001:
<swappable>не имеет видаapp_label.app_name. -
models.E002:
<SETTING>ссылается на<model>, которая либо не установлена, либо является абстрактной. -
models.E003: Модель имеет два много-ко-многие отношения через промежуточную модель
<app_label>.<model>. -
models.E004:
idможет использоваться только в качестве имени поля, если поле также задаётprimary_key=True. -
models.E005: Поле
<field name>из родительской модели<model>конфликтует с полем<field name>из родительской модели<model>. -
models.E006: Поле конфликтует с полем
<field name>из модели<model>. -
models.E007: Поле
<field name>имеет имя столбца<column name>, которое используется другим полем. -
models.E008:
index_togetherдолжно быть списком или кортежем. -
models.E009: Все элементы
index_togetherдолжны быть списками или кортежами. -
models.E010:
unique_togetherдолжно быть списком или кортежем. -
models.E011: Все элементы
unique_togetherдолжны быть списками или кортежами. -
models.E012:
index_together/unique_togetherссылается на несуществующее поле<field name>. -
models.E013:
index_together/unique_togetherссылается наManyToManyField<field name>, ноManyToManyFieldне поддерживаются для этого параметра. -
models.E014:
orderingдолжно быть кортежем или списком (даже если вы хотите сортировать только по одному полю). -
models.E015:
orderingссылается на несуществующее поле<field name>. -
models.E016:
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>не может содержать двойные подчёркивания, так как это конфликтует с синтаксисом поиска запроса.
Безопасность
Проверки безопасности не делают ваш сайт безопасным. Они не проверяют код, не выполняют обнаружение вторжений и не выполняют ничего особенно сложного. Вместо этого они помогают выполнить автоматическую проверку на простые ошибки, которые улучшат безопасность вашего сайта.
Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если вы перенаправляете HTTP на HTTPS в балансировщике нагрузки, постоянные предупреждения о том, что не включено SECURE_SSL_REDIRECT, будут раздражать. Используйте SILENCED_SYSTEM_CHECKS, чтобы отключить ненужные проверки.
Следующие проверки выполняются, если вы используете опцию check --deploy:
-
security.W001: У вас нет
django.middleware.security.SecurityMiddlewareв вашемMIDDLEWARE/MIDDLEWARE_CLASSES, поэтому настройкиSECURE_HSTS_SECONDS,SECURE_CONTENT_TYPE_NOSNIFF,SECURE_BROWSER_XSS_FILTERиSECURE_SSL_REDIRECTне будут иметь никакого эффекта. -
security.W002: У вас нет
django.middleware.clickjacking.XFrameOptionsMiddlewareв вашемMIDDLEWARE/MIDDLEWARE_CLASSES, поэтому ваши страницы не будут передаваться с заголовком'x-frame-options'. Если для вашего сайта нет веских причин, по которым он должен передаваться в фрейме, следует включить этот заголовок, чтобы помочь предотвратить атаки clickjacking. -
security.W003: Похоже, вы не используете встроенную защиту Django от поддельных межсайтовых запросов (CSRF) через middleware (
django.middleware.csrf.CsrfViewMiddlewareотсутствует в вашемMIDDLEWARE/MIDDLEWARE_CLASSES). Включение 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, так и без него, вы можете установить это значение вTrueили настроить балансировщик нагрузки или прокси-сервер для перенаправления всех подключений на HTTPS. -
security.W009: У вашей
SECRET_KEYменьше 50 символов или меньше 5 уникальных символов. Пожалуйста, сгенерируйте длинный и случайныйSECRET_KEY, иначе многие критически важные для безопасности функции Django будут уязвимы для атак. -
security.W010: У вас есть
django.contrib.sessionsв вашемINSTALLED_APPS, но вы не установилиSESSION_COOKIE_SECUREв значениеTrue. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей сетевыми анализаторами. -
security.W011: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE/MIDDLEWARE_CLASSES, но вы не установилиSESSION_COOKIE_SECUREв значениеTrue. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей сетевыми анализаторами. -
security.W012:
SESSION_COOKIE_SECUREне установлено в значениеTrue. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей сетевыми анализаторами. -
security.W013: У вас есть
django.contrib.sessionsв вашемINSTALLED_APPS, но вы не установилиSESSION_COOKIE_HTTPONLYв значениеTrue. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей атаками XSS. -
security.W014: У вас есть
django.contrib.sessions.middleware.SessionMiddlewareв вашемMIDDLEWARE/MIDDLEWARE_CLASSES, но вы не установилиSESSION_COOKIE_HTTPONLYв значениеTrue. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей атаками XSS. -
security.W015:
SESSION_COOKIE_HTTPONLYне установлено в значениеTrue. Использование файла cookie сессии только для защищённого соединения затрудняет перехват сеансов пользователей атаками XSS. -
security.W016:
CSRF_COOKIE_SECUREне установлено в значениеTrue. Использование файла cookie CSRF только для защищённого соединения затрудняет перехват токена CSRF сетевыми анализаторами. -
security.W017:
CSRF_COOKIE_HTTPONLYне установлено в значениеTrue. Использование файла cookie CSRF только для защищённого соединения затрудняет перехват токена CSRF атаками XSS. Эта проверка удалена в Django 1.11, поскольку настройкаCSRF_COOKIE_HTTPONLYне имеет практической пользы. -
security.W018: В развертывании не следует устанавливать
DEBUGв значениеTrue. -
security.W019: У вас есть
django.middleware.clickjacking.XFrameOptionsMiddlewareв вашемMIDDLEWARE/MIDDLEWARE_CLASSES, но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>.
Шаблоны
Следующие проверки гарантируют правильную конфигурацию настройки TEMPLATES:
-
templates.E001: У вас есть
'APP_DIRS': Trueв вашей настройкеTEMPLATES, но вы также указали'loaders'вOPTIONS. УдалитеAPP_DIRSили удалите опцию'loaders'. -
templates.E002:
string_if_invalidвTEMPLATESOPTIONSдолжно быть строкой, но получено:{value}({type}).
URL
Ниже приведены проверки, выполняемые для вашей конфигурации URL:
-
urls.W001: Ваш шаблон URL
<pattern>используетinclude()сregex, заканчивающимся на$. Удалите знак доллара изregex, чтобы избежать проблем с включением URL-адресов. -
urls.W002: Ваш шаблон URL
<pattern>содержитregex, начинающийся с/. Удалите этот слеш, так как он излишний. Если этот шаблон используется вinclude(), убедитесь, что шаблонinclude()имеет конечный/. -
urls.W003: Ваш шаблон URL
<pattern>содержитname, включающий:. Удалите двоеточие, чтобы избежать неоднозначных ссылок на пространства имён. -
urls.E004: Ваш шаблон URL
<pattern>недействителен. Убедитесь, чтоurlpatterns— это список экземпляровurl(). -
urls.W005: Пространство имён URL
<namespace>не уникально. Возможно, вы не сможете обращаться ко всем URL-адресам в этом пространстве имён. -
urls.E006: Параметр
MEDIA_URL/STATIC_URLдолжен заканчиваться слешем.
contrib проверки приложений
admin
Проверки администрирования выполняются в рамках тега admin.
Ниже приведены проверки, выполняемые для любого ModelAdmin (или подкласса), зарегистрированного в админ-панели:
-
admin.E001: Значение
raw_id_fieldsдолжно быть списком или кортежем. -
admin.E002: Значение
raw_id_fields[n]ссылается на<field name>, что не является атрибутом<model>. -
admin.E003: Значение
raw_id_fields[n]должно быть полем внешнего ключа или связи многие-ко-многим. -
admin.E004: Значение
fieldsдолжно быть списком или кортежем. -
admin.E005: Оба
fieldsetsиfieldsуказаны. -
admin.E006: Значение
fieldsсодержит дублирующее(ые) поле(я). -
admin.E007: Значение
fieldsetsдолжно быть списком или кортежем. -
admin.E008: Значение
fieldsets[n]должно быть списком или кортежем. -
admin.E009: Значение
fieldsets[n]должно иметь длину 2. -
admin.E010: Значение
fieldsets[n][1]должно быть словарем. -
admin.E011: Значение
fieldsets[n][1]должно содержать ключfields. -
admin.E012: В
fieldsets[n][1]есть дублирующее(ые) поле(я). -
admin.E013:
fields[n]/fieldsets[n][m]не может включатьManyToManyField<field name>, так как это поле вручную задаёт модель отношений. -
admin.E014: Значение
excludeдолжно быть списком или кортежем. -
admin.E015: Значение
excludeсодержит дублирующее(ые) поле(я). -
admin.E016: Значение
formдолжно наследоваться отBaseModelForm. -
admin.E017: Значение
filter_verticalдолжно быть списком или кортежем. -
admin.E018: Значение
filter_horizontalдолжно быть списком или кортежем. -
admin.E019: Значение
filter_vertical[n]/filter_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>.
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.
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должен быть в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должно быть атрибутом или свойством, а не методом. Игнорирование этого является проблемой безопасности, поскольку анонимные пользователи будут рассматриваться как авторизованные!
contenttypes
Следующие проверки выполняются, когда модель содержит GenericForeignKey или GenericRelation:
-
contenttypes.E001: Объект идентификатора
GenericForeignKeyссылается на несуществующее поле<field>. -
contenttypes.E002: Тип содержимого
GenericForeignKeyссылается на несуществующее поле<field>. -
contenttypes.E003:
<field>не являетсяForeignKey. -
contenttypes.E004:
<field>не являетсяForeignKeyдляcontenttypes.ContentType.
sites
Следующие проверки выполняются для любой модели, использующей CurrentSiteManager:
-
sites.E001:
CurrentSiteManagerне смог найти поле, названное<field name>. -
sites.E002:
CurrentSiteManagerне может использовать<field>, так как это не внешний ключ или поле "многие ко многим".
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.11/ref/checks/