系统检查框架

系统检查框架是一组用于验证Django项目的静态检查。它检测常见问题并提供如何修复这些问题的提示。框架是可扩展的,因此您可以轻松地添加自己的检查。

有关如何添加自己的检查并将其与Django的系统检查集成的详细信息,请参见 System check topic guide .

API引用

CheckMessage

class CheckMessage(level, msg, hint=None, obj=None, id=None)[源代码]

系统检查引发的警告和错误必须是 CheckMessage . 实例封装单个可报告的错误或警告。它还提供适用于消息的上下文和提示,以及用于筛选目的的唯一标识符。

构造函数参数是:

level

消息的严重性。使用一个预定义值: DEBUGINFOWARNINGERRORCRITICAL . 如果水平大于或等于 ERROR ,则django将阻止执行管理命令。级别低于的邮件 ERROR (即警告)向控制台报告,但可以静音。

msg

描述问题的短(少于80个字符)字符串。字符串应该 not 包含换行符。

hint

提供修复问题提示的单行字符串。如果无法提供提示,或者提示从错误消息中是自明的,则可以省略提示,或者值为 None 可以使用。

obj

可选的。为消息提供上下文的对象(例如,发现问题的模型)。对象应该是模型、字段或管理器或定义 __str__() 方法。该方法在报告所有消息时使用,其结果在消息之前。

id

可选字符串。问题的唯一标识符。标识符应该遵循模式 applabel.X001 在哪里 X 是其中一封信 CEWID ,指示消息严重性 (C 对于批评, E 错误等等)。该编号可以由应用程序分配,但在该应用程序中应该是唯一的。

有一些子类可以使创建具有公共级别的消息更加容易。使用时,可以省略 level 参数,因为它是由类名隐含的。

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

内置标签

Django的系统检查使用以下标签进行组织:

  • admin :检查任何管理网站声明。

  • async_support :检查异步相关配置。

  • caches :检查与缓存相关的配置。

  • compatibility :标记版本升级的潜在问题。

  • database :检查与数据库相关的配置问题。默认情况下不会运行数据库检查,因为它们比常规检查执行更多的静态代码分析。它们只由 migrate 命令,或者如果使用 --database 调用 check 命令。

  • files :检查与配置相关的文件。

  • models :检查模型、字段和管理器定义。

  • security :检查安全相关配置。

  • signals :检查信号声明和处理程序注册。

  • sites 支票 django.contrib.sites 配置。

  • staticfiles 支票 django.contrib.staticfiles 配置。

  • templates :检查模板相关配置。

  • translation :检查翻译相关配置。

  • urls :检查URL配置。

有些支票可以用多个标签登记。

核心系统检查

异步支持

以下检查验证您的设置 异步支持

向后兼容

兼容性检查警告升级django后可能出现的潜在问题。

  • 2_0.W001 :您的URL模式 <pattern> 有一个 route 包含 (?P< 从A开始 ^ 或以 $ . 这很可能是移民时的疏忽。 url()path() .

  • 4_0.E001 :从Django 4.0开始, CSRF_TRUSTED_ORIGINS 设置必须以方案开始(通常 http://https:// ),但发现 <hostname>

高速缓存

以下检查确认 CACHES 设置配置正确:

  • caches.E001 :必须定义 'default' 缓存在您的 CACHES 设置。

  • caches.W002 :您的 <cache> 配置可能会暴露您的缓存或导致数据损坏,因为其 LOCATION matches/is inside/contains MEDIA_ROOT/STATIC_ROOT /:设置:STATICFILES_DIRS。

  • caches.W003 :您的 <cache> 高速缓存 LOCATION 是相对的。请改用绝对路径。

数据库

MySQL和Mariadb

如果您使用的是MySQL或MariaDB,将执行以下检查:

  • mysql.E001: MySQL/MariaDB does not allow unique CharFields to have a max_length > 255. This check was changed to mysql.W003 in Django 3.1 as the real maximum size depends on many factors.

  • mysql.W002 :没有为数据库连接设置MySQL/MariaDB Strict模式 <alias> . 也见 设置 sql_mode .

  • mysql.W003 :MySQL/MariaDB可能不允许unique CharField 有一个 max_length >255。

管理文件

以下检查将验证您的设置 文档管理

模型场

  • fields.E001 :字段名不能以下划线结尾。

  • fields.E002 :字段名不能包含 "__" .

  • fields.E003pk 是不能用作字段名的保留字。

  • fields.E004choices 必须是映射(例如字典)或可迭代的(例如列表或元组)。

  • fields.E005choices 必须是实际值到人类可读名称的映射或包含 (actual value, human readable name) 元组。

  • fields.E006db_index 必须是 NoneTrueFalse .

  • fields.E007 :主键不能有 null=True .

  • fields.E008validators 必须是可调用的。

  • fields.E009: max_length is too small to fit the longest value in choices (<count> characters).

  • fields.E010<field> 默认值应该是可调用的,而不是实例,这样它就不会在所有字段实例之间共享。

  • fields.E011<database> 不支持使用表达式的默认数据库值 (db_default )。

  • fields.E012<expression> 不能用于 db_default

  • fields.E100AutoField s必须设置primary_key=true。

  • fields.E110BooleanField s不接受空值。 此检查在Django 2.1中添加对空值的支持之前出现。

  • fields.E120CharField s必须定义 max_length 属性。

  • fields.E121max_length 必须是正整数。

  • fields.W122max_length 与一起使用时被忽略 <integer field type> .

  • fields.E130DecimalField s必须定义 decimal_places 属性。

  • fields.E131decimal_places 必须是非负整数。

  • fields.E132DecimalField s必须定义 max_digits 属性。

  • fields.E133max_digits 必须是正整数。

  • fields.E134max_digits 必须大于或等于 decimal_places .

  • fields.E140FilePathField S必须有 allow_filesallow_folders 设置为真。

  • fields.E150GenericIPAddressField S不可能有 blank=True 如果 null=False ,因为空值存储为空值。

  • fields.E160 选项 auto_nowauto_now_adddefault 相互排斥。这些选项中只能有一个存在。

  • fields.W161 :提供固定默认值。

  • fields.W162<database> 不支持上的数据库索引 <field data type> 柱。

  • fields.W163<database> 不支持列上的注释 (db_comment )。

  • fields.E170BinaryFielddefault 不能是字符串。改为使用字节内容。

  • fields.E180<database> 不支持 JSONField S

  • fields.E190<database> 不支持数据库排序规则 <field_type> S

  • fields.E220<database> 不支持 GeneratedField S。

  • fields.E221<database> 不支持非持久化 GeneratedField S。

  • fields.E222<database> 不支持持久保存 GeneratedField S。

  • fields.E223GeneratedField.output_field 有错误:...

  • fields.W224GeneratedField.output_field 有警告:...

  • fields.E900IPAddressField 已删除,但历史迁移中的支持除外。

  • fields.W900IPAddressField 已弃用。将在Django 1.9中删除对它的支持(历史迁移除外)。 这张支票出现在Django 1.7和1.8中。 .

  • fields.W901CommaSeparatedIntegerField 已弃用。将在Django 2.0中删除对它的支持(历史迁移除外)。 这张支票出现在Django 1.10和1.11中。 .

  • fields.E901CommaSeparatedIntegerField 已删除,但在历史迁移中支持除外。

  • fields.W902FloatRangeField 已弃用,将在Django 3.1中删除。 这个检查出现在Django 2.2和3.0中 .

  • fields.W903NullBooleanField 已弃用。在Django 4.0中将删除对它的支持(历史迁移除外)。 此检查出现在Django 3.1和3.2中

  • fields.E903NullBooleanField 已删除,但在历史迁移中的支持除外。

  • fields.W904django.contrib.postgres.fields.JSONField 已弃用。在Django 4.0中将删除对它的支持(历史迁移除外)。 此检查出现在Django 3.1和3.2中

  • fields.E904django.contrib.postgres.fields.JSONField 已删除,但在历史迁移中的支持除外。

  • fields.W905django.contrib.postgres.fields.CICharField 已弃用。Django 5.1将删除对它的支持(历史迁移除外)。 This check appeared in Django 4.2 and 5.0

  • fields.E905django.contrib.postgres.fields.CICharField 已删除,但在历史迁移中的支持除外。

  • fields.W906django.contrib.postgres.fields.CIEmailField 已弃用。Django 5.1将删除对它的支持(历史迁移除外)。 This check appeared in Django 4.2 and 5.0

  • fields.E906django.contrib.postgres.fields.CIEmailField 已删除,但在历史迁移中的支持除外。

  • fields.W907django.contrib.postgres.fields.CITextField 已弃用。Django 5.1将删除对它的支持(历史迁移除外)。 This check appeared in Django 4.2 and 5.0

  • fields.E907django.contrib.postgres.fields.CITextField 将被删除,但支持历史迁移除外。

文件字段

  • fields.E200unique 不是的有效参数 FileField . 此支票已在Django 1.11中删除。 .

  • fields.E201primary_key 不是的有效参数 FileField .

  • fields.E202FileFieldupload_to 参数必须是相对路径,而不是绝对路径。

  • fields.E210 不能使用 ImageField 因为枕头没有安装。

模型

  • models.E001<swappable> 不符合形式 app_label.app_name .

  • models.E002<SETTING> 参考文献 <model> ,尚未安装,或是抽象的。

  • models.E003 :模型通过中间模型具有两个相同的多对多关系 <app_label>.<model> .

  • models.E004id 如果字段也设置了 primary_key=True .

  • models.E005 田野 <field name> 从父模型 <model> 与现场冲突 <field name> 从父模型 <model> .

  • models.E006 :田野 <field name> 与场上的冲突 <field name> 从模型 <model>

  • models.E007 领域 <field name> 有列名 <column name> 它被另一个字段使用。

  • models.E008index_together 必须是列表或元组。 This check appeared before Django 5.1.

  • models.E009 :全部 index_together 元素必须是列表或元组。 This check appeared before Django 5.1.

  • models.E010unique_together 必须是列表或元组。

  • models.E011unique_together 元素必须是列表或元组。

  • models.E012constraints/indexes/unique_together 指的是不存在的字段 <field name>

  • models.E013constraints/indexes/unique_together 指的是 ManyToManyField <field name> ,但 ManyToManyField S不支持该选项。

  • models.E014ordering 必须是元组或列表(即使您只希望按一个字段排序)。

  • models.E015ordering 引用不存在的字段、相关字段或查找 <field name> .

  • models.E016constraints/indexes/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.E021orderingorder_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.E028db_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.W035db_table <db_table> 用于多个模型: <model list> .

  • models.W036<database> 不支持带条件的唯一约束。

  • models.W037<database> 不支持带条件的索引。

  • models.W038<database> 不支持可延迟的唯一约束。

  • models.W039<database> 不支持非键列的唯一约束。

  • models.W040<database> 不支持非键列的索引。

  • models.E041constraints 引用联接字段 <field name> .

  • models.W042 :默认情况下,未定义主键类型时使用自动创建的主键 django.db.models.AutoField

  • models.W043<database> 不支持表达式上的索引。

  • models.W044<database> 不支持对表达式的唯一约束。

  • models.W045 :检查约束 <constraint>RawSQL() 表达式,并且不会在建模过程中进行验证 full_clean()

  • models.W046<database> 不支持对表进行注释 (db_table_comment )。

  • models.W047<database> 不支持空值为DISTINCT的唯一约束。

安全性

安全检查不会使您的站点安全。他们不审计代码,做入侵检测,或做任何特别复杂的事情。相反,它们有助于执行一个自动化的、低悬挂的水果清单,可以帮助您提高网站的安全性。

其中一些检查可能不适合您的特定部署配置。例如,如果您在负载均衡器中执行HTTP到HTTPS重定向,则不断收到关于未启用的警告会很恼人。 SECURE_SSL_REDIRECT . 使用 SILENCED_SYSTEM_CHECKS 停止不必要的检查。

如果使用 check --deploy 选项:

  • security.W001 :你没有 django.middleware.security.SecurityMiddleware 在你的 MIDDLEWARE 因此, SECURE_HSTS_SECONDSSECURE_CONTENT_TYPE_NOSNIFFSECURE_REFERRER_POLICYSECURE_CROSS_ORIGIN_OPENER_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 . 一定要先阅读文档;不小心启用HST会导致严重的、不可逆转的问题。

  • security.W005 :您尚未设置 SECURE_HSTS_INCLUDE_SUBDOMAINS 设置为 True . 如果不这样做,您的站点可能容易受到通过与子域的不安全连接进行的攻击。只将此设置为 True 如果您确定您的域的所有子域都应该通过SSL以独占方式提供服务。

  • security.W006 你的 SECURE_CONTENT_TYPE_NOSNIFF 设置未设置为 True ,因此您的页面将不会与 'X-Content-Type-Options: nosniff' 标题。您应该考虑启用此标题,以防止浏览器错误地识别内容类型。

  • security.W007: Your SECURE_BROWSER_XSS_FILTER setting is not set to True, so your pages will not be served with an 'X-XSS-Protection: 1; mode=block' header. You should consider enabling this header to activate the browser's XSS filtering and help prevent XSS attacks. This check is removed in Django 3.0 as the X-XSS-Protection header is no longer honored by modern browsers.

  • security.W008 你的 SECURE_SSL_REDIRECT 设置未设置为 True . 除非您的站点可以同时通过SSL和非SSL连接使用,否则您可能希望将此设置设置为 True 或者配置负载均衡器或反向代理服务器,将所有连接重定向到HTTPS。

  • security.W009 :您的 SECRET_KEY 少于50个字符,少于5个唯一字符,或者前缀为 'django-insecure-' 表明它是由Django自动生成的。请生成一个长的随机值,否则Django的许多安全关键功能将容易受到攻击。

  • security.W010 你有 django.contrib.sessions 在你 INSTALLED_APPS 但你还没准备好 SESSION_COOKIE_SECURETrue . 使用仅安全会话cookie使网络流量嗅探器更难劫持用户会话。

  • security.W011 你有 django.contrib.sessions.middleware.SessionMiddleware 在你 MIDDLEWARE ,但你还没有设置 SESSION_COOKIE_SECURETrue . 使用仅安全会话cookie使网络流量嗅探器更难劫持用户会话。

  • security.W012SESSION_COOKIE_SECURE 未设置为 True . 使用仅安全会话cookie使网络流量嗅探器更难劫持用户会话。

  • security.W013 你有 django.contrib.sessions 在你 INSTALLED_APPS ,但你还没有设置 SESSION_COOKIE_HTTPONLYTrue . 使用一个 HttpOnly 会话cookie使得跨站点脚本攻击劫持用户会话更加困难。

  • security.W014 你有 django.contrib.sessions.middleware.SessionMiddleware 在你 MIDDLEWARE ,但你还没有设置 SESSION_COOKIE_HTTPONLYTrue . 使用一个 HttpOnly 会话cookie使得跨站点脚本攻击劫持用户会话更加困难。

  • security.W015SESSION_COOKIE_HTTPONLY 未设置为 True . 使用一个 HttpOnly 会话cookie使得跨站点脚本攻击劫持用户会话更加困难。

  • security.W016CSRF_COOKIE_SECURE 未设置为 True . 使用仅安全的CSRF cookie使网络流量嗅探器更难窃取CSRF令牌。

  • security.W017: CSRF_COOKIE_HTTPONLY is not set to True. Using an HttpOnly CSRF cookie makes it more difficult for cross-site scripting attacks to steal the CSRF token. This check is removed in Django 1.11 as the CSRF_COOKIE_HTTPONLY setting offers no practical benefit.

  • security.W018 :你不应该 DEBUG 设置为 True 部署中。

  • security.W019 你有 django.middleware.clickjacking.XFrameOptionsMiddleware 在你 MIDDLEWARE ,但是 X_FRAME_OPTIONS 未设置为 'DENY' . 除非有一个好的理由让你的站点在一个框架中服务于它自身的其他部分,否则你应该将它改为 'DENY' .

  • security.W020ALLOWED_HOSTS 部署中不能为空。

  • security.W021 :您尚未设置 SECURE_HSTS_PRELOAD 设置为 True . 如果不这样做,您的网站将无法提交到浏览器预加载列表。

  • security.W022 :您尚未设置 SECURE_REFERRER_POLICY 设置。没有这一点,你的网站将不会发送一个推荐策略标题。您应该考虑启用此标头以保护用户隐私。

  • security.E023 :您已设置 SECURE_REFERRER_POLICY 设置为无效值。

  • security.E024 :您已经设置了 SECURE_CROSS_ORIGIN_OPENER_POLICY 设置为无效值。

  • security.W025 :您的 SECRET_KEY_FALLBACKS[n] 少于50个字符,少于5个唯一字符,或者前缀为 'django-insecure-' 表明它是由Django自动生成的。请生成一个长的随机值,否则Django的许多安全关键功能将容易受到攻击。

以下检查验证安全相关设置是否正确配置:

  • security.E100DEFAULT_HASHING_ALGORITHM 一定是 'sha1''sha256'此检查出现在Django 3.1和3.2中

  • security.E101 :CSRF故障视图 'path.to.view' 不接受正确数目的参数。

  • security.E102 :CSRF故障视图 'path.to.view' 无法导入。

信号

  • signals.E001<handler> 连接到 <signal> 对发送方具有延迟引用的信号 <app label>.<model> 但是应用程序 <app label> 未安装或不提供型号 <model> .

模板

以下检查确认 TEMPLATES 设置配置正确:

  • templates.E001 你有 'APP_DIRS': True 在你 TEMPLATES 但也要说明 'loaders' 在里面 OPTIONS . 要么删除 APP_DIRS 或移除 'loaders' 选择权。

  • templates.E002string_if_invalid 在里面 TEMPLATES OPTIONS 必须是字符串,但得到: {{value}} ({{type}}

  • templates.E003:<name> is used for multiple template tag modules: <module list>. This check was changed to templates.W003 in Django 4.1.2.

  • templates.W003<name>``用于多个模板标签模块:  ``<module list>

翻译

对您的翻译配置执行以下检查:

  • translation.E001 :您为提供的值无效 LANGUAGE_CODE 设置: <value> .

  • translation.E002 :您在中提供了无效的语言代码 LANGUAGES 设置: <value> .

  • translation.E003 :您在中提供了无效的语言代码 LANGUAGES_BIDI 设置: <value> .

  • translation.E004 :您已为 LANGUAGE_CODE 设置不在 LANGUAGES 设置。

URLs

对URL配置执行以下检查:

  • urls.W001 :您的URL模式 <pattern> 使用 include() 用一个 route 以A结尾 $ . 把美元从 route 以避免URL等问题。

  • urls.W002 :您的URL模式 <pattern> has a route beginning with a /. Remove this slash as it is unnecessary. If this pattern is targeted in an include(), ensure the include() pattern has a trailing `` ''.

  • urls.W003 :您的URL模式 <pattern> 有一个 name 包括一个 : . 删除冒号,以避免不明确的命名空间引用。

  • urls.E004 :您的URL模式 <pattern> 无效。确保 urlpatterns 是一个列表 path() 和/或 re_path() 实例。

  • urls.W005 URL命名空间 <namespace> 不是唯一的。您可能无法反转此命名空间中的所有URL。

  • urls.E006MEDIA_URL / STATIC_URL 设置必须以斜线结尾。

  • urls.E007 习俗 handlerXXX 看法 'path.to.view' 参数数目不正确(…)。

  • urls.E008 习俗 handlerXXX 看法 'path.to.view' 无法导入。

  • urls.E009 :您的URL模式 <pattern> 具有无效的视图,PASS <view>.as_view() 而不是 <view>

  • urls.W010 :您的URL模式 <pattern> 拥有无与伦比的 <angle bracket>

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 都是 fieldsetsfields 指定。

  • 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]/filter_horizontal[n]/filter_vertical[n]/fieldsets[n][m] 不能包含 ManyToManyField <field name> ,因为该字段手动指定关系模型。

  • admin.E014 的价值 exclude 必须是列表或元组。

  • admin.E015 的价值 exclude 包含重复字段。

  • admin.E016 的价值 form 必须从继承 BaseModelForm .

  • admin.E017 的价值 filter_vertical 必须是列表或元组。

  • admin.E018 的价值 filter_horizontal 必须是列表或元组。

  • admin.E019 :的价值 filter_vertical[n]/filter_horizontal[n]<field name> ,这不是一个领域 <model>

  • admin.E020 :的价值 filter_vertical[n]/filter_horizontal[n] 必须是多对多字段。

  • admin.E021 的价值 radio_fields 一定是一本字典。

  • admin.E022 :的价值 radio_fields<field name> ,这不是一个领域 <model>

  • admin.E023 :的价值 radio_fields<field name> ,它不是 ForeignKey ,并且没有 choices 定义。

  • admin.E024 的价值 radio_fields[<field name>] 必须是 admin.HORIZONTALadmin.VERTICAL .

  • admin.E025 的价值 view_on_site 必须是可调用值或布尔值。

  • admin.E026 的价值 prepopulated_fields 一定是一本字典。

  • admin.E027 :的价值 prepopulated_fields<field name> ,这不是一个领域 <model>

  • admin.E028 的价值 prepopulated_fields<field name> ,不能是 DateTimeField ,A ForeignKey ,A 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]<field_name> ,它不是可调用的,它是 <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] 不能是多对多字段或反向外键。

  • 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_editablelist_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 必须是 DateFieldDateTimeField .

  • 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> 和对象ID字段 <field name> .

AdminSite

对默认值执行以下检查 AdminSite

auth

  • auth.E001REQUIRED_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.E007verbose_name 模型的 <model> 其内置权限名称最多必须为244个字符,最多只能为255个字符。

  • auth.E008 :名为的权限 <name> 模型的 <model> 超过255个字符。

  • auth.C009<User model>.is_anonymous 必须是属性或属性而不是方法。忽略这是一个安全问题,因为匿名用户将被视为经过身份验证的用户!

  • auth.C010<User model>.is_authenticated 必须是属性或属性而不是方法。忽略这是一个安全问题,因为匿名用户将被视为经过身份验证的用户!

  • auth.E011 :型号名称 <model> 必须最多包含93个字符,才能使其内置权限名称最多为100个字符。

  • auth.E012 :名为的权限代码 <codename> 模型的 <model> 长度超过100个字符。

contenttypes

当模型包含 GenericForeignKeyGenericRelation

  • contenttypes.E001GenericForeignKey 对象ID引用不存在的字段 <field> .

  • contenttypes.E002GenericForeignKey 内容类型引用了不存在的字段 <field> .

  • contenttypes.E003<field> 不是一个 ForeignKey .

  • contenttypes.E004<field> 不是一个 ForeignKeycontenttypes.ContentType .

  • contenttypes.E005 :模型名称不能超过100个字符。

postgres

在上执行以下检查 django.contrib.postgres 模型字段:

  • postgres.E001 :数组的基字段有错误:…

  • postgres.E002 :数组的基字段不能是相关字段。

  • postgres.E003: <field> default should be a callable instead of an instance so that it's not shared between all field instances. This check was changed to fields.E010 in Django 3.1.

  • postgres.W004 :数组的基本字段有警告:...

sites

对任何使用 CurrentSiteManager

  • sites.E001CurrentSiteManager 找不到名为的字段 <field name> .

  • sites.E002CurrentSiteManager 不能使用 <field> 因为它不是一个外键或多对多字段。

以下检查证实 django.contrib.sites 配置正确:

  • sites.E101SITE_ID 设置必须是整数。

staticfiles

以下检查证实 django.contrib.staticfiles 配置正确: