Spec-Zone.ru › Django 3.1

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

Система проверки фреймворка — это набор статических проверок для валидации проектов Django. Она обнаруживает распространённые проблемы и предоставляет подсказки по их исправлению. Фреймворк расширяем, поэтому вы можете легко добавить свои собственные проверки.

Подробную информацию о том, как добавить свои собственные проверки и интегрировать их с системами проверок Django, см. в руководстве по теме системной проверки.

Справочник API

CheckMessage

class CheckMessage(level, msg, hint=None, obj=None, id=None)

Предупреждения и ошибки, генерируемые системами проверок, должны быть экземплярами CheckMessage. Экземпляр содержит одну отчётную ошибку или предупреждение. Он также предоставляет контекст и подсказки, относящиеся к сообщению, а также уникальный идентификатор, используемый для фильтрации.

Аргументы конструктора:

level
Уровень серьезности сообщения. Используйте одно из предопределённых значений: DEBUG, INFO, WARNING, ERROR, CRITICAL. Если уровень не ниже ERROR, Django предотвратит выполнение команд управления. Сообщения с уровнем ниже ERROR (т. е. предупреждения) выводятся в консоль, но могут быть отключены.
msg
Короткая строка (менее 80 символов), описывающая проблему. Строка не должна содержать переводы строк.
hint
Строка на одной строке, предоставляющая подсказку по решению проблемы. Если подсказка не может быть предоставлена или очевидна из сообщения об ошибке, подсказка может быть опущена или использовано значение None.
obj
Необязательно. Объект, предоставляющий контекст для сообщения (например, модель, где была обнаружена проблема). Объект должен быть моделью, полем, менеджером или любым другим объектом, который определяет метод __str__(). Метод используется при отчётности всех сообщений, и его результат предшествует сообщению.
id
Необязательная строка. Уникальный идентификатор проблемы. Идентификаторы должны соответствовать шаблону applabel.X001, где X — одна из букв CEWID, указывающая на уровень серьезности сообщения (C для критических, E для ошибок и т. д.). Число может быть назначено приложением, но должно быть уникальным внутри этого приложения.

Существуют подклассы, которые упрощают создание сообщений с общими уровнями. При их использовании вы можете опустить аргумент level, так как он подразумевается именем класса.

class Debug(msg, hint=None, obj=None, id=None)
class Info(msg, hint=None, obj=None, id=None)
class Warning(msg, hint=None obj=None, id=None)
class Error(msg, hint=None, obj=None, id=None)
class Critical(msg, hint=None, obj=None, id=None)

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

Системные проверки Django организованы с использованием следующих тегов:

  • admin: Проверки любых объявлений админского интерфейса.
  • async_support: Проверки конфигурации, связанной с асинхронностью.
  • caches: Проверки конфигурации, связанной с кэшем.
  • compatibility: Помечает потенциальные проблемы при обновлении версий.
  • database: Проверки проблем, связанных с базой данных. Проверки базы данных по умолчанию не выполняются, так как они делают больше, чем статический анализ кода, как и обычные проверки. Они выполняются только командой migrate или если вы укажете конфигурированные псевдонимы баз данных с помощью опции --database при вызове команды check.
  • models: Проверки определений моделей, полей и менеджеров.
  • security: Проверки конфигурации, связанной с безопасностью.
  • signals: Проверки объявлений сигналов и регистрации обработчиков.
  • staticfiles: Проверки конфигурации django.contrib.staticfiles.
  • templates: Проверки конфигурации, связанной с шаблонами.
  • translation: Проверки конфигурации, связанной с переводом.
  • urls: Проверки конфигурации URL.

Некоторые проверки могут быть зарегистрированы с несколькими тегами.

Изменено в Django 3.1:

Добавлен тег async_support.

Изменено в Django 3.1:

Проверки database теперь выполняются только для псевдонимов баз данных, указанных с помощью опции check --database.

Основные системные проверки

Поддержка асинхронности

Новое в Django 3.1.

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

  • async.E001: Вы не должны устанавливать переменную окружения DJANGO_ALLOW_ASYNC_UNSAFE в развертывании. Это отключает защиту от асинхронных небезопасных действий.

Обратная совместимость

Проверки совместимости предупреждают о потенциальных проблемах, которые могут возникнуть после обновления Django.

  • 2_0.W001: Ваш шаблон URL <pattern> имеет route содержащий (?P<, начинающийся с ^ или заканчивающийся на $. Это, вероятно, произошло при миграции из url() в path().

Кэши

Следующие проверки проверяют, что ваше значение CACHES настроены правильно:

  • caches.E001: Вы должны определить кэш 'default' в настройке CACHES.

База данных

MySQL и MariaDB

Если вы используете MySQL или MariaDB, будут выполнены следующие проверки:

  • mysql.E001: MySQL/MariaDB не допускает уникальных CharField с max_length > 255. Эта проверка была изменена в 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: choices должно быть итерируемым объектом (например, списком или кортежем).
  • fields.E005: choices должен быть итерируемым объектом, возвращающим кортежи (actual value, human readable name).
  • fields.E006: db_index должно быть None, True или False.
  • fields.E007: Первичные ключи не должны содержать null=True.
  • fields.E008: Все validators должны быть вызываемыми.
  • fields.E009: max_length слишком мало для размещения самого длинного значения в choices (<count> символов).
  • fields.E010: Значение по умолчанию <field> должно быть вызываемой функцией, а не экземпляром, чтобы не было совместного использования между всеми экземплярами полей.
  • fields.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 не могут принимать пустые значения, если не разрешены нулевые значения, поскольку пустые значения хранятся как нулевые.
  • fields.E160: Опции auto_now, auto_now_add, и default взаимоисключающие. Должна быть только одна из них.
  • fields.W161: Предоставлено фиксированное значение по умолчанию.
  • fields.W162: <database> не поддерживает базовый индекс по столбцам <field data type>.
  • fields.E170: BinaryField’s default не может быть строкой. Используйте бинарное содержимое вместо этого.
  • fields.E180: <database> не поддерживает JSONField.
  • fields.E900: IPAddressField удален, кроме поддержки в исторических миграциях.
  • fields.W900: IPAddressField устарел. Поддержка будет удалена в Django 1.9 (кроме исторических миграций). Эта проверка появилась в Django 1.7 и 1.8.
  • fields.W901: CommaSeparatedIntegerField устарел. Поддержка будет удалена в Django 2.0 (кроме исторических миграций). Эта проверка появилась в Django 1.10 и 1.11.
  • fields.E901: CommaSeparatedIntegerField удален, кроме поддержки в исторических миграциях.
  • fields.W902: FloatRangeField устарел и будет удален в Django 3.1. Эта проверка появилась в Django 2.2 и 3.0.
  • fields.W903: NullBooleanField устарел. Поддержка будет удалена в Django 4.0 (кроме исторических миграций).
  • fields.W904: django.contrib.postgres.fields.JSONField устарел. Поддержка будет удалена в Django 4.0 (кроме исторических миграций).

Файловые поля

  • fields.E200: unique — некорректный аргумент для FileField. Эта проверка удалена в Django 1.11.
  • fields.E201: primary_key — некорректный аргумент для FileField.
  • fields.E202: Аргумент upload_to для FileField должен быть относительным путем, а не абсолютным.
  • 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> не является уникальным.
  • fields.E311: <model>.<field name> должно быть уникальным, так как оно ссылается на ForeignKey.
  • fields.E312: Поле <field name> модели to_field не существует в связанной модели <app label>.<model>.
  • fields.E320: Поле указывает на on_delete=SET_NULL, но не может быть нулевым.
  • fields.E321: Поле указывает на on_delete=SET_DEFAULT, но не имеет значения по умолчанию.
  • fields.E330: ManyToManyField не могут быть уникальными.
  • fields.E331: Поле указывает на много-ко-многие отношения через модель <model>, которая не установлена.
  • fields.E332: Много-ко-многие поля со промежуточными таблицами не должны быть симметричными. Эта проверка появилась до Django 3.0.
  • 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.
  • fields.W344: Промежуточная таблица поля <table name> конфликтует с именем таблицы <model>/<model>.<field name>.

Модели

  • 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.E029: Имя индекса <index> не уникально для модели <model>.
  • models.E030: Имя индекса <index> не уникально среди моделей: <model list>.
  • models.E031: Имя ограничения <constraint> не уникально для модели <model>.
  • models.E032: Имя ограничения <constraint> не уникально среди моделей: <model list>.
  • models.E033: Имя индекса <index> не может начинаться с подчёркивания или цифры.
  • models.E034: Имя индекса <index> не может быть длиннее <max_length> символов.
  • models.W035: db_table <db_table> используется несколькими моделями: <model list>.
  • models.W036: <database> не поддерживает уникальные ограничения с условиями.
  • models.W037: <database> не поддерживает индексы с условиями.
  • models.W038: <database> не поддерживает откладываемые уникальные ограничения.

Безопасность

Проверки безопасности не делают ваш сайт безопасным. Они не проверяют код, не выполняют обнаружение вторжений и не выполняют ничего особенно сложного. Скорее, они помогают выполнить автоматическую проверку простых вещей, которые могут помочь улучшить безопасность вашего сайта.

Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если вы выполняете перенаправление 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_REFERRER_POLICY и SECURE_SSL_REDIRECT не будут иметь эффекта.
  • security.W002: У вас отсутствует django.middleware.clickjacking.XFrameOptionsMiddleware в вашем MIDDLEWARE, поэтому ваши страницы не будут передаваться с заголовком 'x-frame-options'. Если для вашего сайта нет веских причин передавать его в фрейме, вам следует включить этот заголовок для предотвращения атак clickjacking.
  • security.W003: Похоже, вы не используете встроенную защиту от межсайтовых поддельных запросов (CSRF) Django через 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. *Эта проверка удалена в Django 3.0, так как заголовок* X-XSS-Protection *больше не поддерживается современными браузерами.*
  • security.W008: Настройка SECURE_SSL_REDIRECT не установлена в значение True. Если ваш сайт должен быть доступен как по SSL, так и по обычным соединениям, установите это значение в True или настройте балансировщик нагрузки или обратный прокси-сервер для перенаправления всех соединений на HTTPS.
  • security.W009: Ваш SECRET_KEY содержит менее 50 символов или менее 5 уникальных символов. Пожалуйста, сгенерируйте длинный и случайный SECRET_KEY, в противном случае многие критически важные для безопасности функции Django будут уязвимы для атак.
  • security.W010: В вашем INSTALLED_APPS присутствует django.contrib.sessions, но вы не установили SESSION_COOKIE_SECURE в True. Использование безопасного cookie сессии затрудняет перехват сеансов пользователей программами-шпионами.
  • security.W011: В вашем MIDDLEWARE присутствует django.contrib.sessions.middleware.SessionMiddleware, но вы не установили SESSION_COOKIE_SECURE в True. Использование безопасного cookie сессии затрудняет перехват сеансов пользователей программами-шпионами.
  • security.W012: SESSION_COOKIE_SECURE не установлено в True. Использование безопасного cookie сессии затрудняет перехват сеансов пользователей программами-шпионами.
  • security.W013: В вашем INSTALLED_APPS присутствует django.contrib.sessions, но вы не установили SESSION_COOKIE_HTTPONLY в True. Использование HttpOnly cookie сессии затрудняет перехват сеансов пользователей при атаках XSS.
  • security.W014: В вашем MIDDLEWARE присутствует django.contrib.sessions.middleware.SessionMiddleware, но вы не установили SESSION_COOKIE_HTTPONLY в True. Использование HttpOnly cookie сессии затрудняет перехват сеансов пользователей при атаках XSS.
  • security.W015: SESSION_COOKIE_HTTPONLY не установлено в True. Использование HttpOnly cookie сессии затрудняет перехват сеансов пользователей при атаках XSS.
  • security.W016: CSRF_COOKIE_SECURE не установлено в True. Использование безопасного cookie CSRF затрудняет перехват токена CSRF программами-шпионами.
  • security.W017: CSRF_COOKIE_HTTPONLY не установлено в True. Использование HttpOnly cookie CSRF затрудняет перехват токена CSRF при атаках XSS. *Эта проверка удалена в Django 1.11, так как настройка* CSRF_COOKIE_HTTPONLY *не предоставляет практической пользы.*
  • security.W018: В развертывании не должно быть установлено DEBUG в значение True.
  • security.W019: В вашем MIDDLEWARE присутствует django.middleware.clickjacking.XFrameOptionsMiddleware, но X_FRAME_OPTIONS не установлено в 'DENY'. Если для вашего сайта нет веских причин размещать другие части сайта в фрейме, измените его на 'DENY'.
  • security.W020: В развертывании ALLOWED_HOSTS не должно быть пустым.
  • security.W021: Вы не установили настройку SECURE_HSTS_PRELOAD в значение True. Без этого ваш сайт не может быть добавлен в предварительный список браузера.
  • security.W022: Вы не установили настройку SECURE_REFERRER_POLICY. Без этого ваш сайт не будет передавать заголовок Referrer-Policy. Рекомендуется включить этот заголовок для защиты конфиденциальности пользователей.
  • security.E023: Вы установили настройку SECURE_REFERRER_POLICY в неверное значение.

Следующие проверки гарантируют правильную настройку ваших параметров безопасности:

  • security.E100: DEFAULT_HASHING_ALGORITHM должен быть 'sha1' или 'sha256'.

Сигналы

  • 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: <value>.
  • translation.E002: Вы предоставили неверный код языка в настройке LANGUAGES: <value>.
  • translation.E003: Вы предоставили неверный код языка в настройке LANGUAGES_BIDI: <value>.
  • translation.E004: Вы предоставили значение для настройки LANGUAGE_CODE, которого нет в настройке LANGUAGES.

URL-адреса

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

  • urls.W001: Ваш шаблон URL-адреса <pattern> использует include() с route, оканчивающимся на $. Удалите знак доллара из route для предотвращения проблем при включении URL-адресов.
  • urls.W002: Ваш шаблон URL-адреса <pattern> содержит route, начинающийся с /. Удалите этот слеш, так как он не нужен. Если этот шаблон используется в include(), убедитесь, что шаблон include() имеет конечный /.
  • urls.W003: Ваш шаблон URL-адреса <pattern> содержит name с :. Удалите двоеточие, чтобы избежать неоднозначных ссылок на пространство имён.
  • urls.E004: Ваш шаблон URL-адреса <pattern> некорректен. Убедитесь, что urlpatterns представляет собой список path() и/или re_path() элементов.
  • urls.W005: Пространство имён URL <namespace> не уникально. Возможно, не все URL-адреса в этом пространстве имён можно обработать.
  • urls.E006: Настройка MEDIA_URL/ STATIC_URL должна заканчиваться слешем.
  • urls.E007: Пользовательская функция просмотра 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_horizontal[n] ссылается на <field name>, что не является атрибутом <model>.
  • admin.E020: Значение filter_vertical[n]/filter_horizontal[n] должно быть полем «многие ко многим».
  • admin.E021: Значение radio_fields должно быть словарем.
  • admin.E022: Значение radio_fields ссылается на <field name>, что не является атрибутом <model>.
  • admin.E023: Значение radio_fields ссылается на <field name>, что не является ForeignKey, и не имеет определения choices.
  • admin.E024: Значение radio_fields[<field name>] должно быть либо admin.HORIZONTAL, либо admin.VERTICAL.
  • admin.E025: Значение view_on_site должно быть вызываемым объектом или булевым значением.
  • admin.E026: Значение prepopulated_fields должно быть словарем.
  • admin.E027: Значение prepopulated_fields ссылается на <field name>, что не является атрибутом <model>.
  • admin.E028: Значение prepopulated_fields ссылается на <field name>, которое не должно быть полем DateTimeField, ForeignKey, OneToOneField, или ManyToManyField.
  • admin.E029: Значение prepopulated_fields[<field name>] должно быть списком или кортежем.
  • admin.E030: Значение prepopulated_fields ссылается на <field name>, что не является атрибутом <model>.
  • admin.E031: Значение ordering должно быть списком или кортежем.
  • admin.E032: Значение ordering имеет маркер случайного порядка ?, но также содержит другие поля.
  • admin.E033: Значение ordering ссылается на <field name>, что не является атрибутом <model>.
  • admin.E034: Значение readonly_fields должно быть списком или кортежем.
  • admin.E035: Значение readonly_fields[n] не является вызываемым объектом, атрибутом <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, зарегистрированного в админ-панели:

END_OF_DOCUMENT_MARKER
  • 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>, должны быть уникальными. Имя <name> не уникально.

InlineModelAdmin

Следующие проверки выполняются для любого InlineModelAdmin, зарегистрированного как встроенный в ModelAdmin.

  • admin.E201: Нельзя исключить поле <field name>, так как оно является внешним ключом к родительской модели <app_label>.<model>.
  • admin.E202: <model> не имеет отношения ForeignKey к <parent model>./ <model> имеет более одного отношения ForeignKey к <parent model>. Необходимо указать атрибут fk_name.
  • admin.E203: Значение extra должно быть целым числом.
  • admin.E204: Значение max_num должно быть целым числом.
  • admin.E205: Значение min_num должно быть целым числом.
  • admin.E206: Значение formset должно наследоваться от BaseModelFormSet.

GenericInlineModelAdmin

Следующие проверки выполняются для любого GenericInlineModelAdmin, зарегистрированного как встроенный в ModelAdmin.

  • admin.E301: 'ct_field' ссылается на <label>, что не является полем в <model>.
  • admin.E302: 'ct_fk_field' ссылается на <label>, что не является полем в <model>.
  • admin.E303: <model> не имеет GenericForeignKey.
  • admin.E304: <model> не имеет GenericForeignKey с использованием поля типа содержимого <field name> и поля идентификатора объекта <field name>.

AdminSite

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

  • admin.E401: django.contrib.contenttypes должно быть в INSTALLED_APPS для использования приложения администрирования.
  • admin.E402: django.contrib.auth.context_processors.auth должно быть включено в DjangoTemplates (TEMPLATES), если используется стандартный обработчик аутентификации, для использования приложения администрирования.
  • admin.E403: Экземпляр 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

  • 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 символов.

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> должно быть вызываемой функцией, а не экземпляром, чтобы оно не делилось между всеми экземплярами полей. Эта проверка была изменена на fields.E010 в Django 3.1.

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/3.1/ref/checks/

Spec-Zone.ru

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