Spec-Zone.ru › Django 2.1

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

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

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

Справочник API

CheckMessage

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

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

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

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

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

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

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

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

  • admin: Проверки любых объявлений админского сайта.
  • caches: Проверки конфигурации, связанной с кэшем.
  • compatibility: Помечает потенциальные проблемы при обновлении версий.
  • database: Проверки проблем с конфигурацией базы данных. Проверки базы данных по умолчанию не выполняются, так как они делают больше, чем статический анализ кода, как это делают обычные проверки. Они выполняются только командой migrate или если вы укажете тег database при вызове команды check.
  • models: Проверки определений моделей, полей и менеджеров.
  • security: Проверки конфигурации, связанной с безопасностью.
  • signals: Проверки объявлений сигналов и регистраций обработчиков.
  • staticfiles: Проверки конфигурации django.contrib.staticfiles.
  • templates: Проверки конфигурации, связанной с шаблонами.
  • 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.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 игнорируется при использовании с IntegerField.
  • fields.E130: DecimalField должны определять атрибут decimal_places.
  • fields.E131: decimal_places должен быть неотрицательным целым числом.
  • fields.E132: DecimalField должны определять атрибут max_digits.
  • fields.E133: max_digits должен быть неотрицательным целым числом.
  • fields.E134: max_digits должен быть больше или равен decimal_places.
  • fields.E140: FilePathField должны иметь установленным либо allow_files, либо allow_folders.
  • fields.E150: GenericIPAddressField не могут принимать пустые значения, если null-значения запрещены, так как пустые значения хранятся как null.
  • fields.E160: Параметры auto_now, auto_now_add, и default взаимоисключающие. Может присутствовать только один из них.
  • fields.W161: Предоставлено исправленное значение по умолчанию.
  • fields.W162: <database> не поддерживает индекс базы данных для столбцов <field data type>.
  • fields.E900: IPAddressField удален, за исключением поддержки в исторических миграциях.
  • fields.W900: IPAddressField устарел. Поддержка его (кроме исторических миграций) будет удалена в Django 1.9. Эта проверка появилась в Django 1.7 и 1.8.
  • fields.W901: CommaSeparatedIntegerField устарел. Поддержка его (кроме исторических миграций) будет удалена в Django 2.0. Эта проверка появилась в Django 1.10 и 1.11.
  • fields.E901: CommaSeparatedIntegerField удалён, за исключением поддержки в исторических миграциях.

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

  • fields.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> не является уникальным. Добавьте unique=True к любому из этих полей или добавьте хотя бы подмножество к ограничению unique_together.
  • fields.E311: <model> должно установить unique=True, так как на него ссылается ForeignKey.
  • fields.E312: Поле to_field <field name> не существует в связанной модели <app label>.<model>.
  • fields.E320: Поле указывает на on_delete=SET_NULL, но не может быть пустым.
  • fields.E321: Поле указывает на on_delete=SET_DEFAULT, но не имеет значения по умолчанию.
  • fields.E330: ManyToManyField не могут быть уникальными.
  • fields.E331: Поле указывает на много-к-много отношение через модель <model>, которая не установлена.
  • fields.E332: Поля много-к-много с промежуточными таблицами не должны быть симметричными.
  • fields.E333: Модель используется в качестве промежуточной модели <model>, но она имеет более двух внешних ключей к <model>, что неоднозначно. Вы должны указать, какие два внешних ключа Django должен использовать с помощью аргумента through_fields.
  • fields.E334: Модель используется в качестве промежуточной модели <model>, но она имеет более одного внешнего ключа из <model>, что неоднозначно. Вы должны указать, какой внешний ключ Django должен использовать с помощью аргумента through_fields.
  • fields.E335: Модель используется в качестве промежуточной модели <model>, но она имеет более одного внешнего ключа к <model>, что неоднозначно. Вы должны указать, какой внешний ключ Django должен использовать с помощью аргумента through_fields.
  • fields.E336: Модель используется в качестве промежуточной модели <model>, но она не имеет внешнего ключа к <model> или <model>.
  • fields.E337: Поле указывает на through_fields, но не предоставляет имена двух связующих полей, которые должны использоваться для отношения через <model>.
  • fields.E338: Промежуточная модель <through model> не имеет поля <field name>.
  • fields.E339: <model>.<field name> не является внешним ключом к <model>.
  • fields.E340: Промежуточная таблица поля <table name> конфликтует с именем таблицы <model>/<model>.<field name>.
  • fields.W340: null не оказывает влияния на ManyToManyField.
  • fields.W341: ManyToManyField не поддерживает validators.
  • fields.W342: Установка unique=True на ForeignKey имеет тот же эффект, что и использование OneToOneField.
  • fields.W343: limit_choices_to не оказывает влияния на ManyToManyField с моделью through.

Модели

  • models.E001: <swappable> не имеет вида app_label.app_name.
  • models.E002: <SETTING> ссылается на <model>, которая не установлена или является абстрактной.
  • models.E003: Модель имеет два много-к-много отношения через промежуточную модель <app_label>.<model>.
  • models.E004: id может использоваться только как имя поля, если поле также устанавливает primary_key=True.
  • models.E005: Поле <field name> из родительской модели <model> конфликтует с полем <field name> из родительской модели <model>.
  • models.E006: Поле конфликтует с полем <field name> из модели <model>.
  • models.E007: Поле <field name> имеет имя столбца <column name>, используемое другим полем.
  • models.E008: index_together должно быть списком или кортежем.
  • models.E009: Все элементы index_together должны быть списками или кортежами.
  • models.E010: unique_together должно быть списком или кортежем.
  • models.E011: Все элементы unique_together должны быть списками или кортежами.
  • models.E012: indexes/index_together/unique_together ссылается на несуществующее поле <field name>.
  • models.E013: indexes/index_together/unique_together ссылается на ManyToManyField <field name>, но ManyToManyField не поддерживаются для этого варианта.
  • models.E014: ordering должно быть кортежем или списком (даже если вы хотите сортировать только по одному полю).
  • models.E015: ordering ссылается на несуществующее поле <field name>.
  • models.E016: indexes/index_together/unique_together ссылается на поле <field_name>, которое не локально для модели <model>.
  • models.E017: Модель-прокси <model> содержит поля модели.
  • models.E018: Автосгенерированное имя столбца слишком длинное для поля <field>. Максимальная длина — <maximum length> для базы данных <alias>.
  • models.E019: Автосгенерированное имя столбца слишком длинное для поля M2M <M2M field>. Максимальная длина — <maximum length> для базы данных <alias>.
  • models.E020: Метод класса <model>.check() в настоящее время переопределён.
  • models.E021: ordering и order_with_respect_to не могут использоваться вместе.
  • models.E022: <function> содержит леничную ссылку на <app label>.<model>, но приложение <app label> не установлено или не предоставляет модель <model>.
  • models.E023: Имя модели <model> не может начинаться или заканчиваться нижним подчёркиванием, так как это конфликтует с синтаксисом поиска запросов.
  • models.E024: Имя модели <model> не может содержать двойные нижние подчёркивания, так как это конфликтует с синтаксисом поиска запросов.
  • models.E025: Свойство <property name> конфликтует с доступом к связанному полю.
  • models.E026: Модель не может иметь более одного поля с primary_key=True.

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

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

Некоторые из этих проверок могут быть неприменимы к вашей конкретной конфигурации развертывания. Например, если вы перенаправляете HTTP на HTTPS в балансировщике нагрузки, постоянно получать предупреждение о том, что не включено SECURE_SSL_REDIRECT будет раздражать. Используйте SILENCED_SYSTEM_CHECKS для отключения ненужных проверок.

Следующие проверки запускаются, если вы используете опцию check --deploy:

  • security.W001: У вас нет django.middleware.security.SecurityMiddleware в вашем MIDDLEWARE, поэтому настройки SECURE_HSTS_SECONDS, SECURE_CONTENT_TYPE_NOSNIFF, SECURE_BROWSER_XSS_FILTER и SECURE_SSL_REDIRECT не будут иметь эффекта.
  • security.W002: У вас нет django.middleware.clickjacking.XFrameOptionsMiddleware в вашем MIDDLEWARE, поэтому ваши страницы не будут отображаться с заголовком 'x-frame-options'. Если для вашего сайта нет веской причины отображаться во фрейме, рассмотрите включение этого заголовка для предотвращения атак кликджекинга.
  • 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.
  • security.W008: Настройка SECURE_SSL_REDIRECT не установлена в True. Если ваш сайт не должен быть доступен как по SSL, так и по протоколу без 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 сессии затрудняет перехват сессий пользователей атаками XSS.
  • security.W014: У вас есть django.contrib.sessions.middleware.SessionMiddleware в вашем MIDDLEWARE, но вы не установили 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: У вас есть django.middleware.clickjacking.XFrameOptionsMiddleware в вашем MIDDLEWARE, но X_FRAME_OPTIONS не установлена в 'DENY'. По умолчанию 'SAMEORIGIN', но, если нет веских причин для отображения других частей сайта во фрейме, вы должны изменить её на 'DENY'.
  • security.W020: В развертывании ALLOWED_HOSTS не должна быть пустой.
  • security.W021: Вы не установили настройку SECURE_HSTS_PRELOAD в True. Без этого ваш сайт не может быть добавлен в предварительный список браузера.

Сигналы

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

Шаблоны

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

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

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 должна заканчиваться слэшем.

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

InlineModelAdmin

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

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

GenericInlineModelAdmin

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

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

AdminSite

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

  • admin.E401: django.contrib.contenttypes должен быть в INSTALLED_APPS, чтобы использовать приложение администрирования.
  • admin.E402: django.contrib.auth.context_processors.auth должен быть в TEMPLATES, чтобы использовать приложение администрирования.

auth

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

contenttypes

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

  • contenttypes.E001: Идентификатор объекта GenericForeignKey ссылается на несуществующее поле <field>.
  • contenttypes.E002: Тип контента GenericForeignKey ссылается на несуществующее поле <field>.
  • contenttypes.E003: <field> не является ForeignKey.
  • contenttypes.E004: <field> не является ForeignKey к contenttypes.ContentType.
  • 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.

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

Spec-Zone.ru

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