系统检查框架 — Django 文档
系统检查框架
系统检查框架是一组用于验证 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 个字符)字符串。 字符串应该 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)
核心系统检查
异步支持
3.1 版中的新功能。
以下检查验证了 异步支持 的设置:
- async.E001:您不应在部署中设置 DJANGO_ALLOW_ASYNC_UNSAFE 环境变量。 这将禁用 异步安全保护 。
向后兼容
兼容性检查会警告升级 Django 后可能出现的潜在问题。
- 2_0.W001:您的网址格式
<pattern>
有一个route
,其中包含(?P<
,以^
开头,或以$
。 从url()
迁移到 path() 时,这可能是一个疏忽。
缓存
以下检查验证您的 :setting:`CACHES` 设置是否正确配置:
- caches.E001:您必须在 :setting:`CACHES` 设置中定义一个
'default'
缓存。 - 缓存.W002 : 您的
<cache>
配置可能会暴露您的缓存或导致您的数据损坏,因为它 :设置:`位置 ` 匹配/在里面/包含 :设置:`MEDIA_ROOT` / :设置:`STATIC_ROOT` / :设置:`STATICFILES_DIRS` . - 缓存.W003 : 您的
<cache>
缓存 :设置:`位置 ` 是相对的。 请改用绝对路径。
数据库
MySQL 和 MariaDB
如果您使用 MySQL 或 MariaDB,将执行以下检查:
- mysql.E001:MySQL/MariaDB 不允许唯一的
CharField
具有max_length
> 255。 此检查在Django 3.1中更改为mysql.W003
,因为实际最大大小取决于许多因素。 - mysql.W002:没有为数据库连接
<alias>
设置MySQL/MariaDB严格模式。 另见 设置 sql_mode。 - mysql.W003:MySQL/MariaDB 可能不允许唯一的
CharField
具有max_length
> 255。
模型字段
- fields.E001:字段名称不得以下划线结尾。
- fields.E002:字段名称不得包含
"__"
。 - fields.E003:
pk
是保留字,不能作为字段名。 - fields.E004:
choices
必须是可迭代的(例如,列表或元组)。 - fields.E005:
choices
必须是一个包含(actual value, human readable name)
元组的可迭代对象。 - fields.E006:
db_index
必须是None
、True
或False
。 - fields.E007:主键不能有
null=True
。 - fields.E008:所有
validators
必须是可调用的。 - fields.E009:
max_length
太小,无法容纳choices
中的最长值(<count>
个字符)。 - fields.E010:
<field>
默认应该是一个可调用的而不是一个实例,这样它就不会在所有字段实例之间共享。 - fields.E100:
AutoField
s 必须设置 primary_key=True。 - fields.E110:
BooleanField
s 不接受空值。 此检查出现在 Django 2.1 中添加对空值的支持之前。 - fields.E120:
CharField
s 必须定义一个max_length
属性。 - fields.E121:
max_length
必须是正整数。 - fields.W122:
max_length
与<integer field type>
一起使用时会被忽略。 - fields.E130:
DecimalField
s 必须定义一个decimal_places
属性。 - fields.E131:
decimal_places
必须是非负整数。 - fields.E132:
DecimalField
s 必须定义一个max_digits
属性。 - fields.E133:
max_digits
必须是正整数。 - fields.E134:
max_digits
必须大于或等于decimal_places
。 - fields.E140:
FilePathField
必须将allow_files
或allow_folders
设置为 True。 - fields.E150:如果
null=False
,GenericIPAddressField
不能有blank=True
,因为空白值存储为空值。 - fields.E160:选项
auto_now
、auto_now_add
和default
是互斥的。 可能只存在这些选项之一。 - fields.W161:提供固定默认值。
- fields.W162:
<database>
不支持<field data type>
列上的数据库索引。 - fields.E170:
BinaryField
的default
不能是字符串。 改用字节内容。 - fields.E180:
<database>
不支持JSONField
s。 - fields.E190:
<database>
不支持<field_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.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
的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:来自父模型
<model>
的字段<field name>
与来自父模型<model>
的字段<field name>
冲突。 - models.E006:字段
<field name>
与模型<model>
的字段<field name>
冲突。 - 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
指的是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>
的自动生成列名称太长。 数据库<alias>
的最大长度为<maximum length>
。 - models.E019:自动生成的列名称对于 M2M 字段
<M2M field>
来说太长。 数据库<alias>
的最大长度为<maximum length>
。 - models.E020:
<model>.check()
类方法当前被覆盖。 - models.E021:
ordering
和order_with_respect_to
不能一起使用。 - models.E022:
<function>
包含对<app label>.<model>
的惰性引用,但应用程序<app label>
未安装或不提供模型 [ X135X]。 - 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 的重定向,不断被警告未启用 :setting:`SECURE_SSL_REDIRECT` 会很烦人。 使用 :setting:`SILENCED_SYSTEM_CHECKS` 关闭不需要的检查。
如果您使用 check --deploy
选项,则会运行以下检查:
- security.W001:您的 :setting:`MIDDLEWARE` 中没有 django.middleware.security.SecurityMiddleware 所以 :setting:` SECURE_HSTS_SECONDS`, :setting:`SECURE_CONTENT_TYPE_NOSNIFF`, :setting:`SECURE_BROWSER_XSS_FILTER`, :REFERY`2RIC3R3RICURE_X3 setting:`SECURE_SSL_REDIRECT` 设置将不起作用。
- security.W002:您的 :setting:`MIDDLEWARE` 中没有 django.middleware.clickjacking.XFrameOptionsMiddleware,因此您的页面将不会被提供
'x-frame-options'
标头。 除非有充分的理由让您的网站在框架中提供服务,否则您应该考虑启用此标头以帮助防止点击劫持攻击。 - security.W003:您似乎没有通过中间件使用 Django 的内置跨站点请求伪造保护(django.middleware.csrf.CsrfViewMiddleware 不在您的 [ X195X]:设置:`中间件`)。 启用中间件是确保不会留下任何漏洞的最安全方法。
- security.W004:您尚未为 :setting:`SECURE_HSTS_SECONDS` 设置设置值。 如果您的整个站点仅通过 SSL 提供服务,您可能需要考虑设置一个值并启用 HTTP 严格传输安全 。 请务必先阅读文档; 不小心启用 HSTS 会导致严重的、不可逆转的问题。
- security.W005:您尚未将 :setting:`SECURE_HSTS_INCLUDE_SUBDOMAINS` 设置设置为
True
。 如果没有这个,您的站点可能容易受到通过不安全连接到子域的攻击。 仅当您确定域的所有子域都应通过 SSL 专门提供服务时,才将此设置为True
。 - security.W006:您的 :setting:`SECURE_CONTENT_TYPE_NOSNIFF` 设置未设置为
True
,因此您的页面将不会使用'X-Content-Type-Options: nosniff'
标题。 您应该考虑启用此标头以防止浏览器错误地识别内容类型。 - security.W007:您的 :setting:`SECURE_BROWSER_XSS_FILTER` 设置未设置为
True
,因此您的页面将不会使用'X-XSS-Protection: 1; mode=block'
标题。 您应该考虑启用此标头以激活浏览器的 XSS 过滤并帮助防止 XSS 攻击。 此检查在 Django 3.0 中被删除,因为现代浏览器不再支持X-XSS-Protection
标头。 - security.W008:您的 :setting:`SECURE_SSL_REDIRECT` 设置未设置为
True
。 除非您的站点可通过 SSL 和非 SSL 连接访问,否则您可能希望将此设置设置为True
或配置负载平衡器或反向代理服务器以将所有连接重定向到 HTTPS。 - security.W009:您的 :setting:`SECRET_KEY` 少于 50 个字符,少于 5 个唯一字符,或者以
'django-insecure-'
为前缀表示它是生成的由 Django 自动执行。 请生成一个长而随机的SECRET_KEY
,否则 Django 的许多安全关键特性将容易受到攻击。 - security.W010:你的 :setting:`INSTALLED_APPS` 中有 django.contrib.sessions 但你还没有设置 :setting:`SESSION_COOKIE_SECURE ` 到
True
。 使用仅安全的会话 cookie 会使网络流量嗅探器更难劫持用户会话。 - security.W011:您的 :setting:`MIDDLEWARE` 中有 django.contrib.sessions.middleware.SessionMiddleware,但您还没有设置 :setting:`SESSION_COOKIE_SECURE` 到
True
。 使用仅安全的会话 cookie 会使网络流量嗅探器更难劫持用户会话。 - security.W012: :setting:`SESSION_COOKIE_SECURE` 未设置为
True
。 使用仅安全的会话 cookie 会使网络流量嗅探器更难劫持用户会话。 - security.W013:你的 :setting:`INSTALLED_APPS` 中有 django.contrib.sessions,但你还没有设置 :setting:` SESSION_COOKIE_HTTPONLY` 到
True
。 使用HttpOnly
会话 cookie 使跨站点脚本攻击更难劫持用户会话。 - security.W014:您的 :setting:`MIDDLEWARE` 中有 django.contrib.sessions.middleware.SessionMiddleware,但您还没有设置 :setting:`SESSION_COOKIE_HTTPONLY` 到
True
。 使用HttpOnly
会话 cookie 使跨站点脚本攻击更难劫持用户会话。 - security.W015: :setting:`SESSION_COOKIE_HTTPONLY` 未设置为
True
。 使用HttpOnly
会话 cookie 使跨站点脚本攻击更难劫持用户会话。 - security.W016: :setting:`CSRF_COOKIE_SECURE` 未设置为
True
。 使用仅安全的 CSRF cookie 会使网络流量嗅探器更难窃取 CSRF 令牌。 - security.W017: :setting:`CSRF_COOKIE_HTTPONLY` 未设置为
True
。 使用HttpOnly
CSRF cookie 使跨站点脚本攻击更难窃取 CSRF 令牌。 此检查在 Django 1.11 中被删除,因为 :setting:`CSRF_COOKIE_HTTPONLY` 设置没有提供任何实际好处。 - security.W018:您不应该在部署中将 :setting:`DEBUG` 设置为
True
。 - security.W019:您的 :setting:`MIDDLEWARE` 中有 django.middleware.clickjacking.XFrameOptionsMiddleware,但 :setting:`X_FRAME_OPTION 未设置为
'DENY'
。 除非您的站点有充分的理由在框架中提供自身的其他部分,否则您应该将其更改为'DENY'
。 - security.W020: :setting:`ALLOWED_HOSTS` 在部署中不能为空。
- security.W021:您尚未将 :setting:`SECURE_HSTS_PRELOAD` 设置设置为
True
。 没有这个,您的站点将无法提交到浏览器预加载列表。 - security.W022:您尚未设置 :setting:`SECURE_REFERRER_POLICY` 设置。 没有这个,您的站点将不会发送 Referrer-Policy 标头。 您应该考虑启用此标头以保护用户隐私。
- security.E023:您已将 :setting:`SECURE_REFERRER_POLICY` 设置为无效值。
以下检查验证您的安全相关设置是否已正确配置:
- security.E100: :setting:`DEFAULT_HASHING_ALGORITHM` 必须是
'sha1'
或'sha256'
。 - security.E101:CSRF 失败视图
'path.to.view'
未采用正确数量的参数。 - security.E102:无法导入CSRF失败视图
'path.to.view'
。
信号
- signals.E001:
<handler>
连接到<signal>
信号,延迟引用发送方<app label>.<model>
,但应用程序<app label>
不是'未安装或不提供型号<model>
。
模板
以下检查验证您的 :setting:`TEMPLATES` 设置是否正确配置:
- templates.E001:您的 :setting:`TEMPLATES` 中有
'APP_DIRS': True
,但也在OPTIONS
中指定'loaders'
。 删除APP_DIRS
或删除'loaders'
选项。 - 模板.E002 :
string_if_invalid
在 :设置:`模板` :设置:`选项 ` 必须是一个字符串,但得到:{value}
({type}
)。
翻译
对您的翻译配置执行以下检查:
- translation.E001:您为 :setting:`LANGUAGE_CODE` 设置提供了无效值:
<value>
。 - translation.E002:您在 :setting:`LANGUAGES` 设置中提供了无效的语言代码:
<value>
。 - translation.E003:您在 :setting:`LANGUAGES_BIDI` 设置中提供了无效的语言代码:
<value>
。 - translation.E004:您为 :setting:`LANGUAGE_CODE` 设置提供了一个值,该值不在 :setting:`LANGUAGES` 设置中。
网址
对您的 URL 配置执行以下检查:
- urls.W001:您的 URL 模式
<pattern>
使用 include() 和route
以$
结尾。 从route
中删除美元以避免出现包括 URL 在内的问题。 - urls.W002:您的 URL 模式
<pattern>
有一个route
以/
开头。 删除此斜线,因为它是不必要的。 如果在 include() 中针对此模式,请确保 include() 模式具有尾随/
。 - urls.W003:你的 URL 模式
<pattern>
有一个name
,包括一个:
。 删除冒号,以避免不明确的命名空间引用。 - urls.E004:您的网址格式
<pattern>
无效。 确保urlpatterns
是 path() 和/或 re_path() 实例的列表。 - urls.W005:URL 命名空间
<namespace>
不是唯一的。 您可能无法反转此命名空间中的所有 URL。 - urls.E006::setting:`MEDIA_URL`/ :setting:`STATIC_URL` 设置必须以斜线结尾。
- urls.E007:自定义
handlerXXX
视图'path.to.view'
未采用正确数量的参数 (...)。 - urls.E008:无法导入自定义
handlerXXX
视图'path.to.view'
。
contrib 应用检查
admin
管理员检查都作为 admin
标签的一部分执行。
对在管理站点注册的任何 ModelAdmin(或子类)执行以下检查:
- admin.E001:
raw_id_fields
的值必须是列表或元组。 - admin.E002:
raw_id_fields[n]
的值指的是<field name>
,不是<model>
的属性。 - admin.E003:
raw_id_fields[n]
的值必须是外键或多对多字段。 - admin.E004:
fields
的值必须是列表或元组。 - admin.E005:指定了
fieldsets
和fields
。 - admin.E006:
fields
的值包含重复字段。 - admin.E007:
fieldsets
的值必须是列表或元组。 - admin.E008:
fieldsets[n]
的值必须是列表或元组。 - admin.E009:
fieldsets[n]
的长度必须为2。 - admin.E010:
fieldsets[n][1]
的值必须是字典。 - admin.E011:
fieldsets[n][1]
的值必须包含键fields
。 - admin.E012:
fieldsets[n][1]
中有重复的字段。 - admin.E013:
fields[n]/fieldsets[n][m]
不能包含ManyToManyField
<field name>
,因为该字段手动指定了关系模型。 - admin.E014:
exclude
的值必须是列表或元组。 - admin.E015:
exclude
的值包含重复字段。 - admin.E016:
form
的值必须继承自BaseModelForm
。 - admin.E017:
filter_vertical
的值必须是列表或元组。 - admin.E018:
filter_horizontal
的值必须是列表或元组。 - admin.E019:
filter_vertical[n]/filter_horizontal[n]
的值指的是<field name>
,不是<model>
的属性。 - admin.E020:
filter_vertical[n]/filter_horizontal[n]
的值必须是多对多的字段。 - admin.E021:
radio_fields
的值必须是字典。 - admin.E022:
radio_fields
的值指的是<field name>
,不是<model>
的属性。 - admin.E023:
radio_fields
的值指的是<field name>
,不是ForeignKey
的实例,也没有[ X128X]定义。 - 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
、[ X111X] 或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>
,不是指一个Field。 - 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编辑。 - admin.E126:
search_fields
的值必须是列表或元组。 - admin.E127:
date_hierarchy
的值指的是<field name>
,不是指一个Field。 - admin.E128:
date_hierarchy
的值必须是DateField
或DateTimeField
。 - admin.E129:
<modeladmin>
必须为<action>
动作定义一个has_<foo>_permission()
方法。 - admin.E130:
<modeladmin>
中定义的动作的__name__
属性必须是唯一的。 名称<name>
不是唯一的。
InlineModelAdmin
对在 ModelAdmin 上注册为内联的任何 InlineModelAdmin 执行以下检查。
- 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
对在 ModelAdmin 上注册为内联的任何 GenericInlineModelAdmin 执行以下检查。
- 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 上执行以下检查:
- admin.E401: django.contrib.contenttypes 必须在 :setting:`INSTALLED_APPS` 中才能使用管理应用程序。
- admin.E402: django.contrib.auth.context_processors.auth 必须在 DjangoTemplates 中启用 (:setting:`TEMPLATES`)如果使用默认身份验证后端以使用管理应用程序。
- admin.E403:必须在 :setting:`TEMPLATES` 中配置 django.template.backends.django.DjangoTemplates 实例才能使用管理应用程序.
- admin.E404:必须在 DjangoTemplates (:setting:`TEMPLATES`) 中启用
django.contrib.messages.context_processors.messages
才能使用管理应用程序。 - admin.E405: django.contrib.auth 必须在 :setting:`INSTALLED_APPS` 中才能使用管理应用程序。
- admin.E406: django.contrib.messages 必须在 :setting:`INSTALLED_APPS` 中才能使用管理应用程序。
- admin.E408: django.contrib.auth.middleware.AuthenticationMiddleware 必须在 :setting:`MIDDLEWARE` 中才能使用管理应用程序。
- admin.E409: django.contrib.messages.middleware.MessageMiddleware 必须在 :setting:`MIDDLEWARE` 中才能使用管理应用程序。
- admin.E410: django.contrib.sessions.middleware.SessionMiddleware 必须在 :setting:`MIDDLEWARE` 中才能使用管理应用程序。
- admin.W411:必须在 DjangoTemplates (:setting:`TEMPLATES`) 中启用
django.template.context_processors.request
才能使用管理导航侧边栏。
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:模型
<model>
的verbose_name最多为244个字符,其内置权限名称最多为255个字符。 - auth.E008:型号
<model>
的名为<name>
的权限超过255个字符。 - auth.C009:
<User model>.is_anonymous
必须是属性或属性而不是方法。 忽略这是一个安全问题,因为匿名用户将被视为经过身份验证! - auth.C010:
<User model>.is_authenticated
必须是属性或属性而不是方法。 忽略这是一个安全问题,因为匿名用户将被视为经过身份验证! - auth.E011:型号
<model>
的名称最多为93个字符,其内置权限名称最多为100个字符。 - auth.E012:型号
<model>
的权限代号为<codename>
超过100个字符。
contenttypes
当模型包含 GenericForeignKey 或 GenericRelation 时,将执行以下检查:
- contenttypes.E001:
GenericForeignKey
对象 ID 引用了不存在的字段<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>
默认应该是一个可调用的而不是一个实例,这样它就不会在所有字段实例之间共享。 此项检查在Django 3.1中更改为fields.E010
。
sites
使用 CurrentSiteManager 对任何模型执行以下检查:
- sites.E001:
CurrentSiteManager
找不到名为<field name>
的字段。 - sites.E002:
CurrentSiteManager
不能使用<field>
,因为它不是外键或多对多字段。
以下检查验证 django.contrib.sites 是否正确配置:
- sites.E101::setting:`SITE_ID` 设置必须是整数。
staticfiles
以下检查验证 django.contrib.staticfiles 是否正确配置:
- staticfiles.E001::setting:`STATICFILES_DIRS` 设置不是元组或列表。
- staticfiles.E002::setting:`STATICFILES_DIRS` 设置不应包含 :setting:`STATIC_ROOT` 设置。
- staticfiles.E003::setting:`STATICFILES_DIRS`设置中的前缀
<prefix>
不能以斜线结尾。