Spec-Zone.ru › Django 3.0

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

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

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

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

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

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

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

Кэши

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

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

База данных

MySQL

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

  • mysql.E001: MySQL не позволяет уникальным 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.E009: max_length слишком мал, чтобы вместить самое длинное значение в choices (<count> символов).
  • fields.E100: AutoField должны устанавливать primary_key=True.
  • fields.E110: BooleanField не принимают значения null. Эта проверка появилась до добавления поддержки null значений в 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 не могут принимать значения blank, если значения null не разрешены, так как значения blank хранятся как null.
  • fields.E160: Опции auto_now, auto_now_add, и default взаимоисключают друг друга. Может присутствовать только одна из них.
  • fields.W161: Предоставлено исправленное значение по умолчанию.
  • fields.W162: <database> не поддерживает индекс базы данных в столбцах <field data type>.
  • fields.E170: BinaryField’s default не может быть строкой. Используйте байтовое содержимое вместо этого.
  • 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’s 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> не является уникальным.
  • 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: Многие-ко-многим поля со вспомогательными таблицами не должны быть симметричными. Эта проверка появилась до 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.

Модели

  • 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>.

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

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

Некоторые из этих проверок могут быть неподходящими для вашей конкретной конфигурации развертывания. Например, если вы перенаправляете 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: Похоже, вы не используете встроенную защиту от межсайтовых поддельных запросов 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: У вас есть 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'. Если для вашего сайта нет веской причины использовать другие части самого себя во фрейме, следует изменить это значение на 'DENY'.
  • security.W020: ALLOWED_HOSTS не должно быть пустым в развёртывании.
  • security.W021: Вы не установили настройку SECURE_HSTS_PRELOAD в True. Без этого ваш сайт не может быть добавлен в список предварительной загрузки браузера.
  • security.W022: Вы не установили настройку SECURE_REFERRER_POLICY. Без этого ваш сайт не будет отправлять заголовок Referrer-Policy. Следует рассмотреть возможность включения этого заголовка для защиты конфиденциальности пользователей.
  • security.E023: Вы установили настройку SECURE_REFERRER_POLICY на недопустимое значение.

Сигналы

  • 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_vertical[n] относится к <field name>, что не является атрибутом <model>.
  • admin.E020: Значение filter_vertical[n]/filter_vertical[n] должно быть полем «многие ко многим».
  • admin.E021: Значение radio_fields должно быть словарем.
  • admin.E022: Значение radio_fields относится к <field name>, что не является атрибутом <model>.
  • admin.E023: Значение radio_fields относится к <field name>, что не является ForeignKey, и не имеет определения choices.
  • admin.E024: Значение radio_fields[<field name>] должно быть либо admin.HORIZONTAL, либо admin.VERTICAL.
  • admin.E025: Значение view_on_site должно быть либо вызываемым объектом, либо булевым значением.
  • admin.E026: Значение prepopulated_fields должно быть словарем.
  • admin.E027: Значение prepopulated_fields относится к <field name>, что не является атрибутом <model>.
  • admin.E028: Значение prepopulated_fields относится к <field name>, которое не должно быть полем DateTimeField, ForeignKey, OneToOneField или ManyToManyField.
  • admin.E029: Значение prepopulated_fields[<field name>] должно быть списком или кортежем.
  • admin.E030: Значение prepopulated_fields относится к <field name>, что не является атрибутом <model>.
  • admin.E031: Значение ordering должно быть списком или кортежем.
  • admin.E032: Значение ordering имеет маркер случайного порядка ?, но также содержит и другие поля.
  • admin.E033: Значение ordering относится к <field name>, что не является атрибутом <model>.
  • admin.E034: Значение readonly_fields должно быть списком или кортежем.
  • admin.E035: Значение readonly_fields[n] не является вызываемым объектом, атрибутом <ModelAdmin class> или атрибутом <model>.
  • admin.E036: Значение autocomplete_fields должно быть списком или кортежем.
  • admin.E037: Значение autocomplete_fields[n] относится к <field name>, что не является атрибутом <model>.
  • admin.E038: Значение autocomplete_fields[n] должно быть внешним ключом или полем «многие ко многим».
  • admin.E039: Администратор для модели <model> должен быть зарегистрирован для использования в <modeladmin>.autocomplete_fields.
  • admin.E040: <modeladmin> должен определить search_fields, так как на него ссылается <other_modeladmin>.autocomplete_fields.

ModelAdmin

Ниже приведены проверки, выполняемые для любого ModelAdmin, зарегистрированного в администраторской панели:

  • admin.E101: Значение save_as должно быть булевым.
  • admin.E102: Значение save_on_top должно быть булевым.
  • admin.E103: Значение inlines должно быть списком или кортежем.
  • admin.E104: <InlineModelAdmin class> должен наследоваться от InlineModelAdmin.
  • admin.E105: <InlineModelAdmin class> должен иметь атрибут model.
  • admin.E106: Значение <InlineModelAdmin class>.model должно быть Model.
  • admin.E107: Значение list_display должно быть списком или кортежем.
  • admin.E108: Значение list_display[n] ссылается на <label>, которое не является вызываемым, атрибутом <ModelAdmin class> или атрибутом или методом <model>.
  • admin.E109: Значение list_display[n] не должно быть полем ManyToManyField.
  • admin.E110: Значение list_display_links должно быть списком, кортежем или None.
  • admin.E111: Значение list_display_links[n] ссылается на <label>, которое не определено в list_display.
  • admin.E112: Значение list_filter должно быть списком или кортежем.
  • admin.E113: Значение list_filter[n] должно наследоваться от ListFilter.
  • admin.E114: Значение list_filter[n] не должно наследоваться от FieldListFilter.
  • admin.E115: Значение list_filter[n][1] должно наследоваться от FieldListFilter.
  • admin.E116: Значение list_filter[n] ссылается на <label>, которое не ссылается на поле.
  • admin.E117: Значение list_select_related должно быть булевым, кортежем или списком.
  • admin.E118: Значение list_per_page должно быть целым числом.
  • admin.E119: Значение list_max_show_all должно быть целым числом.
  • admin.E120: Значение list_editable должно быть списком или кортежем.
  • admin.E121: Значение list_editable[n] ссылается на <label>, которое не является атрибутом <model>.
  • admin.E122: Значение list_editable[n] ссылается на <label>, которое не содержится в list_display.
  • admin.E123: Значение list_editable[n] не может быть одновременно в list_editable и list_display_links.
  • admin.E124: Значение list_editable[n] ссылается на первое поле в list_display (<label>), которое нельзя использовать, если list_display_links не задано.
  • admin.E125: Значение list_editable[n] ссылается на <field name>, которое нельзя редактировать через админку.
  • admin.E126: Значение search_fields должно быть списком или кортежем.
  • admin.E127: Значение date_hierarchy ссылается на <field name>, которое не ссылается на поле.
  • admin.E128: Значение date_hierarchy должно быть DateField или DateTimeField.
  • admin.E129: <modeladmin> должен определить метод has_<foo>_permission() для действия <action>.
  • admin.E130: Атрибуты __name__ действий, определённых в <modeladmin> должны быть уникальными.

InlineModelAdmin

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

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

GenericInlineModelAdmin

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

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

AdminSite

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

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

auth

  • auth.E001: REQUIRED_FIELDS должен быть списком или кортежем.
  • auth.E002: Поле с именем USERNAME_FIELD для пользовательской модели не должно быть включено в REQUIRED_FIELDS.
  • auth.E003: <field> должен быть уникальным, так как он назван USERNAME_FIELD.
  • auth.W004: <field> назван USERNAME_FIELD, но не является уникальным.
  • auth.E005: Имя разрешения <codename> совпадает с встроенным разрешением для модели <model>.
  • auth.E006: Разрешение с кодовым именем <codename> дублируется для модели <model>.
  • auth.E007: verbose_name модели <model> должно содержать не более 244 символов для встроенных имён разрешений, чтобы они не превышали 255 символов.
  • auth.E008: Разрешение <name> модели <model> длиннее 255 символов.
  • auth.C009: <User model>.is_anonymous должен быть атрибутом или свойством, а не методом. Игнорирование этого представляет собой проблему безопасности, поскольку анонимные пользователи будут обрабатываться как авторизованные!
  • auth.C010: <User model>.is_authenticated должен быть атрибутом или свойством, а не методом. Игнорирование этого представляет собой проблему безопасности, поскольку анонимные пользователи будут обрабатываться как авторизованные!

contenttypes

Следующие проверки выполняются, когда модель содержит GenericForeignKey или GenericRelation:

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

postgres

Следующие проверки выполняются для полей моделей с django.contrib.postgres:

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

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.0/ref/checks/

Spec-Zone.ru

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