Spec-Zone.ru › Django 2.2

Система проверки фреймворка

Система проверки фреймворка — это набор статических проверок для валидации проектов 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__(). Этот метод используется при отображении всех сообщений, и его результат предшествует сообщению.
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]

Встроенные теги

Системные проверки 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, начинающийся с ^, или заканчивающийся на $. Это, вероятно, ошибка при миграции с url() на path().

Кэши

Следующие проверки проверяют, что ваше значение 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.E008: Все validators должны быть вызываемыми.
  • fields.E100: AutoField должны устанавливать primary_key=True.
  • fields.E110: BooleanField не принимают пустые значения. *Эта проверка появилась до добавления поддержки пустых значений в Django 2.1.*
  • fields.E120: CharField должны определять атрибут max_length.
  • fields.E121: max_length должно быть положительным целым числом.
  • fields.W122: max_length игнорируется при использовании с <integer field type>.
  • fields.E130: DecimalField должны определять атрибут decimal_places.
  • fields.E131: decimal_places должно быть неотрицательным целым числом.
  • fields.E132: DecimalField должны определять атрибут max_digits.
  • fields.E133: max_digits должно быть неотрицательным целым числом.
  • fields.E134: max_digits должно быть больше или равно decimal_places.
  • fields.E140: FilePathField должны иметь либо allow_files или allow_folders, установленные в True.
  • fields.E150: GenericIPAddressField не могут принимать пустые значения, если не допускаются null-значения, так как пустые значения сохраняются как null.
  • 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: Аргумент FileField upload_to должен быть относительным путем, а не абсолютным.
  • fields.E210: Нельзя использовать ImageField, так как Pillow не установлен.

Связанные поля

  • fields.E300: Поле определяет отношение с моделью <model>, которая либо не установлена, либо является абстрактной.
  • fields.E301: Поле определяет отношение с моделью <model>, которая была заменена.
  • fields.E302: Метод доступа к полю <field name> конфликтует с полем <field name>.
  • fields.E303: Имя обратного запроса для поля <field name> конфликтует с полем <field name>.
  • fields.E304: Имя поля <field name> конфликтует с методом доступа к <field name>.
  • fields.E305: Имя поля <field name> конфликтует с именем обратного запроса для <field name>.
  • fields.E306: Связанное имя должно быть допустимым идентификатором Python или заканчиваться на '+'.
  • fields.E307: Поле <app label>.<model>.<field name> было объявлено с леничной ссылкой на <app label>.<model>, но приложение <app label> не установлено или не предоставляет модель <model>.
  • fields.E308: Имя обратного запроса <related query name> не должно заканчиваться на подчеркивании.
  • fields.E309: Имя обратного запроса <related query name> не должно содержать '__'.
  • fields.E310: Никакое подмножество полей <field1>, <field2>, … модели <model> не является уникальным. Добавьте unique=True к любому из этих полей или добавьте хотя бы подмножество этих полей в ограничение unique_together.
  • fields.E311: <model> должно задать unique=True, так как оно используется в ForeignKey.
  • fields.E312: Поле to_field <field name> не существует в связанной модели <app label>.<model>.
  • fields.E320: Поле задает on_delete=SET_NULL, но не может быть NULL.
  • fields.E321: Поле задает on_delete=SET_DEFAULT, но не имеет значения по умолчанию.
  • fields.E330: ManyToManyField не могут быть уникальными.
  • fields.E331: Поле задает много-ко-многие отношения через модель <model>, которая не установлена.
  • fields.E332: Поля много-ко-многие с промежуточными таблицами не должны быть симметричными.
  • fields.E333: Модель используется как промежуточная модель в <model>, но она имеет более двух внешних ключей к <model>, что неоднозначно. Вы должны указать, какие два внешних ключа Django должен использовать, через ключевое слово through_fields.
  • fields.E334: Модель используется как промежуточная модель в <model>, но она имеет более одного внешнего ключа от <model>, что неоднозначно. Вы должны указать, какой внешний ключ Django должен использовать, через ключевое слово through_fields.
  • fields.E335: Модель используется как промежуточная модель в <model>, но она имеет более одного внешнего ключа к <model>, что неоднозначно. Вы должны указать, какой внешний ключ Django должен использовать, через ключевое слово through_fields.
  • fields.E336: Модель используется как промежуточная модель в <model>, но она не имеет внешнего ключа к <model> или <model>.
  • fields.E337: Поле задает through_fields, но не предоставляет имена двух связующих полей, которые должны использоваться для связи через <model>.
  • fields.E338: Промежуточная модель <through model> не имеет поля <field name>.
  • fields.E339: <model>.<field name> не является внешним ключом к <model>.
  • fields.E340: Промежуточная таблица поля <table name> конфликтует с именем таблицы <model>/<model>.<field name>.
  • fields.W340: null не влияет на ManyToManyField.
  • fields.W341: ManyToManyField не поддерживает validators.
  • fields.W342: Установка unique=True на ForeignKey имеет тот же эффект, что и использование OneToOneField.
  • fields.W343: limit_choices_to не влияет на ManyToManyField с моделью through.

Модели

  • models.E001: <swappable> не имеет форму app_label.app_name.
  • models.E002: <SETTING> ссылается на <model>, которая не установлена или является абстрактной.
  • models.E003: Модель имеет два одинаковых много-ко-многие отношения через промежуточную модель <app_label>.<model>.
  • models.E004: id может быть использовано только как имя поля, если поле также задает primary_key=True.
  • models.E005: Поле <field name> из родительской модели <model> конфликтует с полем <field name> из родительской модели <model>.
  • models.E006: Поле конфликтует с полем <field name> модели <model>.
  • models.E007: Поле <field name> имеет имя колонки <column name>, которое используется другим полем.
  • models.E008: index_together должно быть списком или кортежем.
  • models.E009: Все элементы index_together должны быть списками или кортежами.
  • models.E010: unique_together должно быть списком или кортежем.
  • models.E011: Все элементы unique_together должны быть списками или кортежами.
  • models.E012: indexes/index_together/unique_together ссылается на несуществующее поле <field name>.
  • models.E013: indexes/index_together/unique_together ссылается на ManyToManyField <field name>, но ManyToManyField не поддерживаются для этого параметра.
  • models.E014: ordering должно быть кортежем или списком (даже если вы хотите упорядочить только по одному полю).
  • models.E015: ordering ссылается на несуществующее поле <field name>.
  • models.E016: indexes/index_together/unique_together ссылается на поле <field_name>, которое не локально для модели <model>.
  • models.E017: Модель-прокси <model> содержит поля модели.
  • models.E018: Сгенерированное имя колонки слишком длинно для поля <field>. Максимальная длина — <maximum length> для базы данных <alias>.
  • models.E019: Сгенерированное имя колонки слишком длинно для поля M2M <M2M field>. Максимальная длина — <maximum length> для базы данных <alias>.
  • models.E020: Метод класса <model>.check() в настоящее время переопределен.
  • models.E021: ordering и order_with_respect_to не могут быть использованы вместе.
  • models.E022: <function> содержит леничную ссылку на <app label>.<model>, но приложение <app label> не установлено или не предоставляет модель <model>.
  • models.E023: Имя модели <model> не может начинаться или заканчиваться подчеркиванием, так как это конфликтует с синтаксисом поиска запроса.
  • models.E024: Имя модели <model> не может содержать двойные подчеркивания, так как это конфликтует с синтаксисом поиска запроса.
  • models.E025: Свойство <property name> конфликтует с методом доступа к связанному полю.
  • models.E026: Модель не может иметь более одного поля с primary_key=True.
  • models.W027: <database> не поддерживает ограничения проверки.
  • models.E028: db_table <db_table> используется несколькими моделями: <model list>.
  • models.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 от межсайтовых запросов с подделкой (CSRF) посредством middleware (django.middleware.csrf.CsrfViewMiddleware не включен в ваш MIDDLEWARE). Включение middleware — это самый безопасный подход для того, чтобы гарантировать отсутствие уязвимостей.
  • security.W004: Для настройки SECURE_HSTS_SECONDS не задано значение. Если ваш сайт доступен только через SSL, рекомендуется задать значение и включить HTTP Strict Transport Security. Сначала обязательно ознакомьтесь с документацией; небрежное включение HSTS может привести к серьёзным и необратимым проблемам.
  • security.W005: Вы не установили значение настройки SECURE_HSTS_INCLUDE_SUBDOMAINS в True. Без этого ваш сайт потенциально уязвим к атакам через небезопасное подключение к поддомену. Установите это значение в True только если уверены, что все поддомены вашего домена должны предоставляться исключительно через SSL.
  • security.W006: Ваша настройка SECURE_CONTENT_TYPE_NOSNIFF не установлена в True, поэтому ваши страницы не будут передаваться с заголовком 'X-Content-Type-Options: nosniff'. Следует рассмотреть возможность включения этого заголовка, чтобы предотвратить неправильное определение типов контента браузером.
  • security.W007: Ваша настройка SECURE_BROWSER_XSS_FILTER не установлена в True, поэтому ваши страницы не будут передаваться с заголовком 'X-XSS-Protection: 1; mode=block'. Следует рассмотреть возможность включения этого заголовка для активации фильтрации XSS в браузере и предотвращения атак XSS.
  • 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, но вы не установили SESSION_COOKIE_SECURE в True. Использование безопасного-только cookie сессии затрудняет перехват сессий пользователей средствами перехвата сетевого трафика.
  • security.W012: SESSION_COOKIE_SECURE не установлено в True. Использование безопасного-только cookie сессии затрудняет перехват сессий пользователей средствами перехвата сетевого трафика.
  • security.W013: У вас есть django.contrib.sessions в вашем INSTALLED_APPS, но вы не установили SESSION_COOKIE_HTTPONLY в True. Использование HttpOnly cookie сессии затрудняет перехват сессий пользователей атаками межсайтового скриптинга.
  • security.W014: У вас есть django.contrib.sessions.middleware.SessionMiddleware в вашем MIDDLEWARE, но вы не установили SESSION_COOKIE_HTTPONLY в True. Использование HttpOnly cookie сессии затрудняет перехват сессий пользователей атаками межсайтового скриптинга.
  • security.W015: SESSION_COOKIE_HTTPONLY не установлено в True. Использование HttpOnly cookie сессии затрудняет перехват сессий пользователей атаками межсайтового скриптинга.
  • security.W016: CSRF_COOKIE_SECURE не установлено в True. Использование безопасного-только CSRF cookie затрудняет перехват токена CSRF средствами перехвата сетевого трафика.
  • security.W017: CSRF_COOKIE_HTTPONLY не установлено в True. Использование HttpOnly CSRF 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>.

Шаблоны

Следующие проверки гарантируют правильную конфигурацию вашей настройки TEMPLATES:

  • templates.E001: У вас есть 'APP_DIRS': True в вашей настройке TEMPLATES, но также указано 'loaders' в OPTIONS. Либо удалите APP_DIRS, либо удалите опцию 'loaders'.
  • templates.E002: string_if_invalid в TEMPLATES OPTIONS должно быть строкой, но получено: {value} ({type}).

Перевод

Ниже перечислены проверки, выполняемые для вашей конфигурации перевода:

  • 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 проверки приложений

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> и поле ID объекта <field name>.

AdminSite

Следующие проверки выполняются для стандартной AdminSite:

  • admin.E401: django.contrib.contenttypes должен быть в INSTALLED_APPS для использования приложения администрирования.
  • admin.E402: django.contrib.auth.context_processors.auth должен быть включен в DjangoTemplates (TEMPLATES), если используется стандартный модуль аутентификации, для использования приложения администрирования.
  • admin.E403: Экземпляр django.template.backends.django.DjangoTemplates должен быть сконфигурирован в TEMPLATES для использования приложения администрирования.
  • admin.E404: django.contrib.messages.context_processors.messages должен быть включен в DjangoTemplates (TEMPLATES) для использования приложения администрирования.
  • admin.E405: django.contrib.auth должен быть в INSTALLED_APPS для использования приложения администрирования.
  • admin.E406: django.contrib.messages должен быть в INSTALLED_APPS для использования приложения администрирования.
  • admin.E408: django.contrib.auth.middleware.AuthenticationMiddleware должен быть в MIDDLEWARE для использования приложения администрирования.
  • admin.E409: django.contrib.messages.middleware.MessageMiddleware должен быть в MIDDLEWARE для использования приложения администрирования.
  • admin.E410: django.contrib.sessions.middleware.SessionMiddleware должен быть в MIDDLEWARE для использования приложения администрирования.

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: Объект ID GenericForeignKey ссылается на несуществующее поле <field>.
  • contenttypes.E002: Тип содержимого GenericForeignKey ссылается на несуществующее поле <field>.
  • contenttypes.E003: <field> не является ForeignKey.
  • contenttypes.E004: <field> не является ForeignKey для contenttypes.ContentType.
  • contenttypes.E005: Имена моделей должны содержать не более 100 символов.

postgres

Ниже перечислены проверки, выполняемые для полей моделей django.contrib.postgres:

  • postgres.E001: Базовое поле массива содержит ошибки: …
  • postgres.E002: Базовое поле массива не может быть связанным полем.
  • postgres.E003: Значение по умолчанию для <field> должно быть вызываемым объектом, а не экземпляром, чтобы оно не использовалось совместно между всеми экземплярами поля.

sites

Ниже перечислены проверки, выполняемые для любой модели, использующей CurrentSiteManager:

  • sites.E001: CurrentSiteManager не удалось найти поле с именем <field name>.
  • sites.E002: CurrentSiteManager не может использовать <field>, так как это не поле внешнего ключа или связи "многие ко многим".

staticfiles

Ниже перечислены проверки, гарантирующие корректную настройку django.contrib.staticfiles:

  • staticfiles.E001: Настройка STATICFILES_DIRS не является кортежем или списком.
  • staticfiles.E002: Настройка STATICFILES_DIRS не должна содержать настройку STATIC_ROOT.
  • staticfiles.E003: Префикс <prefix> в настройке STATICFILES_DIRS не должен заканчиваться слешем.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.2/ref/checks/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API