系统检查框架 — 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)
核心系统检查
向后兼容
兼容性检查会警告升级 Django 后可能出现的潜在问题。
- 2_0.W001:您的网址格式
<pattern>有一个route,其中包含(?P<,以^开头,或以$。 从url()迁移到 path() 时,这可能是一个疏忽。
数据库
MySQL
如果您使用的是 MySQL,将执行以下检查:
- mysql.E001:MySQL 不允许唯一的
CharField具有max_length> 255。 - mysql.W002:没有为数据库连接
<alias>设置MySQL严格模式。 另见 设置 sql_mode。
模型字段
- fields.E001:字段名称不得以下划线结尾。
- fields.E002:字段名称不得包含
"__"。 - fields.E003:
pk是保留字,不能作为字段名。 - fields.E004:
choices必须是可迭代的(例如,列表或元组)。 - fields.E005:
choices必须是一个可迭代的返回(actual value, human readable name)元组。 - fields.E006:
db_index必须是None、True或False。 - fields.E007:主键不能有
null=True。 - fields.E008:所有
validators必须是可调用的。 - fields.E009:
max_length太小,无法容纳choices中的最长值(<count>个字符)。 - fields.E100:
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:
FilePathField必须将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的default不能是字符串。 改用字节内容。 - fields.E900:
IPAddressField已被移除,但支持历史迁移。 - fields.W900:
IPAddressField已被弃用。 对它的支持(历史迁移除外)将在 Django 1.9 中移除。 此检查出现在 Django 1.7 和 1.8 中。 - fields.W901:
CommaSeparatedIntegerField已被弃用。 对它的支持(历史迁移除外)将在 Django 2.0 中删除。 此检查出现在 Django 1.10 和 1.11 中。 - fields.E901:
CommaSeparatedIntegerField被移除,除了支持历史迁移。 - fields.W902:
FloatRangeField已弃用,将在 Django 3.1 中删除。
文件字段
- fields.E200:
unique不是FileField的有效参数。 此检查在 Django 1.11 中被删除。 - fields.E201:
primary_key不是FileField的有效参数。 - fields.E202:
FileField的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:该字段与来自模型
<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:
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>的自动生成列名称太长。 数据库<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>。
安全
安全检查不会使您的站点安全。 他们不审计代码,不做入侵检测,也不做任何特别复杂的事情。 相反,它们帮助执行自动化的、容易实现的清单,这可以帮助您提高站点的安全性。
其中一些检查可能不适合您的特定部署配置。 例如,如果您在负载均衡器中进行 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 个唯一字符。 请生成一个长而随机的
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。 使用HttpOnlyCSRF 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` 设置为无效值。
信号
- 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_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、[ 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__属性必须是唯一的。
InlineModelAdmin
对在 ModelAdmin 上注册为内联的任何 InlineModelAdmin 执行以下检查。
- 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
对在 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` 中才能使用管理应用程序。
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必须是属性或属性而不是方法。 忽略这是一个安全问题,因为匿名用户将被视为经过身份验证!
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>默认应该是一个可调用的而不是一个实例,这样它就不会在所有字段实例之间共享。
sites
使用 CurrentSiteManager 对任何模型执行以下检查:
- sites.E001:
CurrentSiteManager找不到名为<field name>的字段。 - sites.E002:
CurrentSiteManager不能使用<field>,因为它不是外键或多对多字段。
staticfiles
以下检查验证 django.contrib.staticfiles 是否正确配置:
- staticfiles.E001::setting:`STATICFILES_DIRS` 设置不是元组或列表。
- staticfiles.E002::setting:`STATICFILES_DIRS` 设置不应包含 :setting:`STATIC_ROOT` 设置。
- staticfiles.E003::setting:`STATICFILES_DIRS`设置中的前缀
<prefix>不能以斜线结尾。