Фреймворк проверки системы

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

Для получения подробной информации о том, как добавить свои собственные проверки и интегрировать их с системными проверками Django, см. Руководство по теме проверки системы .

Справочник по API

CheckMessage

classCheckMessage ( 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аргумент, потому что он подразумевается именем класса.

classDebug ( msg , hint = None , obj = None , id = None )
classInfo ( msg , hint = None , obj = None , id = None )
classWarning ( msg , hint = None obj = None , id = None )
classError ( msg , hint = None , obj = None , id = None )
classCritical ( msg , hint = None , obj = None , id = None )

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

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

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

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

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

async_supportТэг был добавлен.

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

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

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

sitesТэг был добавлен.

Проверка основной системы

Асинхронная поддержка

Новое в Django 3.1.

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

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

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

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

Кеши

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

  • caches.E001 : Вы должны определить 'default'кеш в своих CACHESнастройках.
  • caches.W002 : ваша <cache>конфигурация может раскрыть ваш кеш или привести к повреждению ваших данных, потому что его LOCATIONсовпадения / находятся внутри / contains MEDIA_ROOT/ STATIC_ROOT/ STATICFILES_DIRS.
  • caches.W003 : Ваш <cache>кеш LOCATION относительный. Вместо этого используйте абсолютный путь.

База данных

MySQL и MariaDB

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

  • mysql.E001 : MySQL / MariaDB не позволяет уникальным CharFields иметь max_length> 255. Эта проверка была изменена на mysql.W003 в Django 3.1, поскольку реальный максимальный размер зависит от многих факторов.
  • mysql.W002 : Строгий режим MySQL / MariaDB не установлен для подключения к базе данных <alias>. См. Также Настройка sql_mode .
  • mysql.W003 : MySQL / MariaDB может не разрешать уникальным CharFields иметь 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>default должен быть вызываемым, а не экземпляром, чтобы он не использовался всеми экземплярами поля.
  • fields.E100 : AutoFields должен установить primary_key = True.
  • fields.E110 : BooleanFields не принимают нулевые значения. Эта проверка появилась до того, как в Django 2.1 была добавлена ​​поддержка нулевых значений.
  • fields.E120 : CharFields должен определять max_lengthатрибут.
  • fields.E121 : max_lengthдолжно быть положительным целым числом.
  • fields.W122 : max_lengthигнорируется при использовании с .<integer field type>
  • fields.E130 : DecimalFields должен определять decimal_placesатрибут.
  • fields.E131 : decimal_placesдолжно быть целым неотрицательным числом.
  • fields.E132 : DecimalFields должен определять max_digitsатрибут.
  • fields.E133 : max_digitsдолжно быть неотрицательным целым числом.
  • fields.E134 : max_digitsдолжно быть больше или равно decimal_places.
  • fields.E140 : FilePathFields должны быть либо allow_filesили allow_foldersустановлен в значение True.
  • fields.E150 : GenericIPAddressFields не может принимать пустые значения, если пустые значения не разрешены, так как пустые значения сохраняются как пустые.
  • fields.E160 : варианты auto_now, auto_now_addи default взаимно исключают друг друга. Может присутствовать только один из этих вариантов.
  • fields.W161 : предоставлено фиксированное значение по умолчанию.
  • fields.W162 : <database>не поддерживает индекс базы данных по столбцам.<field data type>
  • fields.E170 : BinaryField«s defaultне может быть строкой. Вместо этого используйте байтовое содержимое.
  • fields.E180 : <database>не поддерживает JSONFields.
  • fields.E190 : <database>не поддерживает сортировку базы данных по <field_type>s.
  • 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 : FileField«s upload_toаргумент должен быть относительный путь, а не абсолютный путь.
  • fields.E210 : Невозможно использовать, ImageFieldпотому что Pillow не установлен.

Модели

  • models.E001 : <swappable>не в форме app_label.app_name.
  • models.E002 : <SETTING>ссылки <model>, которые не были установлены или являются абстрактными.
  • models.E003 : Модель имеет два идентичных отношения «многие ко многим» через промежуточную модель <app_label>.<model>.
  • models.E004 : idможет использоваться как имя поля, только если поле также задано primary_key=True.
  • models.E005 : поле родительской модели конфликтует с полем родительской модели .<field name><model><field name><model>
  • models.E006 : Поле сталкивается с полем из модели .<field name><model>
  • models.E007 : поле имеет имя столбца , которое используется другим полем.<field name><column name>
  • models.E008 : index_togetherдолжен быть списком или кортежем.
  • models.E009 : Все index_togetherэлементы должны быть списками или кортежами.
  • models.E010 : unique_togetherдолжен быть списком или кортежем.
  • models.E011 : Все unique_togetherэлементы должны быть списками или кортежами.
  • models.E012 : constraints/indexes/index_together/unique_together относится к несуществующему полю .<field name>
  • models.E013 : constraints/indexes/index_together/unique_together относится к a , но s не поддерживаются для этой опции.ManyToManyField <field name>ManyToManyField
  • models.E014 : orderingдолжен быть кортежем или списком (даже если вы хотите упорядочить только по одному полю).
  • models.E015 : orderingотносится к несуществующему полю, связанному полю или поиску .<field name>
  • models.E016 : constraints/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>не поддерживает отложенные уникальные ограничения.
  • models.W039 : <database>не поддерживает уникальные ограничения с неключевыми столбцами.
  • models.W040 : <database>не поддерживает индексы с неключевыми столбцами.
  • models.E041 : constraintsотносится к объединенному полю .<field name>
  • models.W042 : автоматически созданный первичный ключ, используемый по умолчанию, когда не определяется тип первичного ключа django.db.models.AutoField.
  • models.W043 : <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'заголовком. Если нет веских причин для показа вашего сайта во фрейме, вам следует рассмотреть возможность включения этого заголовка, чтобы предотвратить атаки кликджекинга.
  • security.W003 : Похоже, вы не используете встроенную в Django защиту от подделки межсайтовых запросов через промежуточное ПО ( django.middleware.csrf.CsrfViewMiddlewareне в вашем MIDDLEWARE). Включение промежуточного программного обеспечения - самый безопасный подход, гарантирующий, что вы не оставите никаких дыр.
  • security.W004 : Вы не установили значение для SECURE_HSTS_SECONDSпараметра. Если весь ваш сайт обслуживается только через SSL, вы можете рассмотреть возможность установки значения и включения HTTP Strict Transport Security . Обязательно сначала прочтите документацию; Небрежное включение HSTS может вызвать серьезные необратимые проблемы.
  • security.W005 : Вы не установили SECURE_HSTS_INCLUDE_SUBDOMAINSзначение True. Без этого ваш сайт потенциально уязвим для атак через небезопасное соединение с субдоменом. Установите это значение только в том Trueслучае, если вы уверены, что все поддомены вашего домена должны обслуживаться исключительно через SSL.
  • security.W006 : Ваш SECURE_CONTENT_TYPE_NOSNIFFпараметр не установлен True, поэтому ваши страницы не будут обслуживаться с заголовком. Вам следует рассмотреть возможность включения этого заголовка, чтобы браузер не мог неправильно определять типы контента.'X-Content-Type-Options: nosniff'
  • security.W007 : Ваш SECURE_BROWSER_XSS_FILTERпараметр не установлен True, поэтому ваши страницы не будут обслуживаться с заголовком. Вам следует рассмотреть возможность включения этого заголовка, чтобы активировать XSS-фильтрацию браузера и помочь предотвратить XSS-атаки. Эта проверка удалена в Django 3.0, поскольку современные браузеры больше не поддерживают заголовок.'X-XSS-Protection: 1; mode=block' X-XSS-Protection
  • security.W008 : Ваша SECURE_SSL_REDIRECTнастройка не установлена ​​на True. Если ваш сайт не должен быть доступен как через SSL, так и через соединения без SSL, вы можете либо установить этот параметр, Trueлибо настроить балансировщик нагрузки или обратный прокси-сервер для перенаправления всех подключений на HTTPS.
  • security.W009 : ваш SECRET_KEYсодержит менее 50 символов, менее 5 уникальных символов или префикс, 'django-insecure-' указывающий, что он был автоматически сгенерирован Django. Пожалуйста, создайте длинный и случайный файл 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. Использование файла cookie CSRF, предназначенного только для безопасного использования, затрудняет для снифферов сетевого трафика кражу токена CSRF.
  • security.W017 : CSRF_COOKIE_HTTPONLYне установлено True. Использование HttpOnlyфайла cookie CSRF затрудняет кражу токена 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недопустимое значение параметра.

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

  • security.E100 : DEFAULT_HASHING_ALGORITHMдолжно быть 'sha1'или 'sha256'.
  • security.E101 : представление сбоя CSRF 'path.to.view'не принимает правильное количество аргументов.
  • security.E102 : 'path.to.view'Не удалось импортировать представление сбоя CSRF .

Сигналы

  • signal.E001 : <handler>был подключен к <signal>сигналу с ленивой ссылкой на отправителя , но приложение не установлено или не предоставляет модель .<app label>.<model><app label><model>

Шаблоны

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

  • templates.E001 : У вас есть в вашем, но также укажите в . Либо удалите, либо удалите опцию.'APP_DIRS': TrueTEMPLATES'loaders'OPTIONSAPP_DIRS'loaders'
  • templates.E002 : string_if_invalidin должно быть строкой, но есть: ( ).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>ForeignKeychoices
  • admin.E024 : Значение должно быть либо или .radio_fields[<field name>]admin.HORIZONTALadmin.VERTICAL
  • admin.E025 : значение view_on_siteдолжно быть либо вызываемым, либо логическим значением.
  • admin.E026 : Значение prepopulated_fieldsдолжно быть словарём.
  • admin.E027 : значение prepopulated_fieldsотносится к , которое не является атрибутом .<field name><model>
  • admin.E028 : значение prepopulated_fieldsотносится к , которое не должно быть полем , а , а или полем.<field name>DateTimeFieldForeignKeyOneToOneFieldManyToManyField
  • 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>.modelModel
  • 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:

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

postgres

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

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

sites

Следующие проверки выполняются на любой модели с использованием CurrentSiteManager:

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

Следующие проверки подтверждают django.contrib.sitesправильность настройки:

  • sites.E101 : SITE_IDзначение должно быть целым числом.

staticfiles

Следующие проверки подтверждают django.contrib.staticfilesправильность настройки:

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

Copyright ©2021 All rights reserved