系統檢查框架¶
系統檢查框架是一組用於驗證 Django 專案的靜態檢查。它可以偵測常見的問題,並提供如何修復這些問題的提示。這個框架是可擴展的,所以您可以輕鬆加入自己的檢查。
有關如何加入您自己的檢查並將它們與 Django 的系統檢查整合的詳細資訊,請參閱系統檢查主題指南。
API 參考¶
CheckMessage
¶
系統檢查所發出的警告和錯誤必須是 CheckMessage
的實例。一個實例封裝了一個單一的可報告錯誤或警告。它也提供了適用於訊息的上下文和提示,以及用於過濾目的的唯一識別碼。
建構子引數為
level
訊息的嚴重性。使用其中一個預定義的值:
DEBUG
、INFO
、WARNING
、ERROR
、CRITICAL
。如果嚴重性等於或大於ERROR
,則 Django 將會阻止管理指令執行。嚴重性低於ERROR
(也就是警告)的訊息會報告到主控台,但可以被靜音。msg
簡短(少於 80 個字元)描述問題的字串。該字串*不應該*包含換行符號。
hint
提供修復問題提示的單行字串。如果無法提供提示,或者提示從錯誤訊息中顯而易見,則可以省略提示,或者使用
None
的值。obj
選用。提供訊息上下文的物件(例如,發現問題的模型)。該物件應該是模型、欄位或管理器,或任何其他定義
__str__()
方法的物件。該方法在報告所有訊息時使用,其結果會先於訊息。id
選用字串。問題的唯一識別碼。識別碼應遵循
applabel.X001
模式,其中X
是字母CEWID
中的一個,表示訊息的嚴重性(C
代表嚴重,E
代表錯誤等等)。數字可以由應用程式分配,但應在該應用程式內是唯一的。
有一些子類別可以使建立具有常用嚴重性的訊息更容易。當使用它們時,您可以省略 level
引數,因為它是由類別名稱所暗示的。
核心系統檢查¶
非同步支援¶
以下檢查會驗證您的 非同步支援 設定。
async.E001:您不應在部署時設定
DJANGO_ALLOW_ASYNC_UNSAFE
環境變數。這會停用非同步安全保護。
向後相容性¶
相容性檢查會警告升級 Django 後可能發生的問題。
2_0.W001:您的 URL 模式
<pattern>
的route
包含(?P<
,開頭為^
,或結尾為$
。這很可能是在從url()
遷移到path()
時的疏忽。4_0.E001:自 Django 4.0 起,
CSRF_TRUSTED_ORIGINS
設定中的值必須以 scheme(通常是http://
或https://
)開頭,但找到<hostname>
。
快取¶
以下檢查會驗證您的 CACHES
設定是否正確設定
caches.E001:您必須在
CACHES
設定中定義'default'
快取。caches.W002:您的
<cache>
設定可能會暴露您的快取或導致您的資料損毀,因為其LOCATION
符合/位於/包含MEDIA_ROOT
/STATIC_ROOT
/STATICFILES_DIRS
。caches.W003:您的
<cache>
快取LOCATION
是相對路徑。請改用絕對路徑。
資料庫¶
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。
管理檔案¶
以下檢查會驗證您的 管理檔案 設定。
files.E001:
FILE_UPLOAD_TEMP_DIR
設定指向不存在的目錄<path>
。
模型欄位¶
fields.E001:欄位名稱不得以底線結尾。
fields.E002:欄位名稱不得包含
"__"
。fields.E003:
pk
是一個保留字,不能用作欄位名稱。fields.E004:
choices
必須是映射(例如字典)或可迭代物件(例如清單或元組)。fields.E005:
choices
必須是實際值到人類可讀名稱的映射,或是包含(實際值, 人類可讀名稱)
元組的可迭代物件。fields.E006:
db_index
必須是None
、True
或False
。fields.E007:主鍵不得有
null=True
。fields.E008:所有
validators
都必須是可呼叫的。fields.E009:
max_length
太小,無法容納choices
中最長的值(<count>
個字元)。fields.E010:
<field>
預設值應該是可呼叫的,而不是實例,這樣它就不會在所有欄位實例之間共享。fields.E011:
<database>
不支援使用表達式(db_default
)的預設資料庫值。fields.E012:
<expression>
無法在db_default
中使用。fields.E100:
AutoField
必須設定 primary_key=True。fields.E110:
BooleanField
不接受 null 值。此檢查在 Django 2.1 中新增對 null 值支援之前出現。fields.E120:
CharField
必須定義max_length
屬性。fields.E121:
max_length
必須是正整數。fields.W122:與
<integer field type>
一起使用時,max_length
會被忽略。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
設定為 True。fields.E150:如果
null=False
,GenericIPAddressField
不能有blank=True
,因為空白值會儲存為 null。fields.E160:選項
auto_now
、auto_now_add
和default
是互斥的。只能存在其中一個選項。fields.W161:已提供固定的預設值。
fields.W162:
<database>
不支援<field data type>
資料行上的資料庫索引。fields.W163:
<database>
不支援資料行上的註解(db_comment
)。fields.E170:
BinaryField
的default
不能是字串。請改用位元組內容。fields.E180:
<database>
不支援JSONField
。fields.E190:
<database>
不支援在<field_type>
上使用資料庫排序規則。fields.E220:
<database>
不支援GeneratedField
。fields.E221:
<database>
不支援非持久化的GeneratedField
。fields.E222:
<database>
不支援持久化的GeneratedField
。fields.E223:
GeneratedField.output_field
有錯誤:…fields.W224:
GeneratedField.output_field
有警告:…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 中移除。此檢查出現在 Django 3.1 和 3.2 中。fields.E903:
NullBooleanField
已移除,僅保留對歷史遷移的支援。fields.W904:
django.contrib.postgres.fields.JSONField
已被棄用。對它的支援(除了在歷史遷移中)將在 Django 4.0 中移除。此檢查出現在 Django 3.1 和 3.2 中。fields.E904:
django.contrib.postgres.fields.JSONField
已移除,僅保留對歷史遷移的支援。fields.W905:
django.contrib.postgres.fields.CICharField
已被棄用。對它的支援(除了在歷史遷移中)將在 Django 5.1 中移除。此檢查出現在 Django 4.2 和 5.0 中。fields.E905:
django.contrib.postgres.fields.CICharField
已移除,僅保留對歷史遷移的支援。fields.W906:
django.contrib.postgres.fields.CIEmailField
已被棄用。對它的支援(除了在歷史遷移中)將在 Django 5.1 中移除。此檢查出現在 Django 4.2 和 5.0 中。fields.E906:
django.contrib.postgres.fields.CIEmailField
已移除,僅保留對歷史遷移的支援。fields.W907:
django.contrib.postgres.fields.CITextField
已被棄用。對它的支援(除了在歷史遷移中)將在 Django 5.1 中移除。此檢查出現在 Django 4.2 和 5.0 中。fields.E907:
django.contrib.postgres.fields.CITextField
已移除,僅保留對歷史遷移的支援。
檔案欄位¶
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
必須是列表或元組。此檢查在 Django 5.1 之前就已存在。models.E009: 所有
index_together
元素都必須是列表或元組。此檢查在 Django 5.1 之前就已存在。models.E010:
unique_together
必須是列表或元組。models.E011: 所有
unique_together
元素都必須是列表或元組。models.E012:
constraints/indexes/unique_together
參照了不存在的欄位<field name>
。models.E013:
constraints/indexes/unique_together
參照了ManyToManyField
<field name>
,但是該選項不支援ManyToManyField
。models.E014:
ordering
必須是元組或列表(即使您只想按一個欄位排序)。models.E015:
ordering
參照了不存在的欄位、關聯欄位或查詢<field name>
。models.E016:
constraints/indexes/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>
未安裝,或未提供模型<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>
不支援對運算式建立索引。models.W044:
<database>
不支援對運算式建立唯一約束。models.W045: 檢查約束
<constraint>
包含RawSQL()
運算式,並且在模型full_clean()
期間不會進行驗證。models.W046:
<database>
不支援資料表上的註解 (db_table_comment
)。models.W047:
<database>
不支援帶有 NULL 值不同的唯一約束。
安全性¶
安全檢查並不能使您的網站安全。它們不會稽核程式碼、執行入侵偵測,或執行任何特別複雜的事情。相反地,它們有助於執行自動化的、唾手可得的檢查清單,這可以幫助您提高網站的安全性。
其中一些檢查可能不適合您的特定部署配置。例如,如果您在負載平衡器中執行 HTTP 到 HTTPS 的重新導向,那麼不斷收到關於未啟用 SECURE_SSL_REDIRECT
的警告,會令人感到惱火。使用 SILENCED_SYSTEM_CHECKS
來關閉不需要的檢查。
如果您使用 check --deploy
選項,則會執行以下檢查。
security.W001: 您的
MIDDLEWARE
中沒有django.middleware.security.SecurityMiddleware
,因此SECURE_HSTS_SECONDS
、SECURE_CONTENT_TYPE_NOSNIFF
、SECURE_REFERRER_POLICY
、SECURE_CROSS_ORIGIN_OPENER_POLICY
和SECURE_SSL_REDIRECT
設定將不會生效。security.W002: 您的
MIDDLEWARE
中沒有django.middleware.clickjacking.XFrameOptionsMiddleware
,因此您的頁面將不會提供'x-frame-options'
標頭。除非您的網站有充分的理由需要在框架中顯示,否則您應該考慮啟用此標頭以幫助防止點擊劫持攻擊。security.W003: 您似乎沒有透過中介軟體使用 Django 內建的跨站請求偽造保護機制(您的
MIDDLEWARE
中沒有django.middleware.csrf.CsrfViewMiddleware
)。啟用中介軟體是確保您不留下任何漏洞的最安全方法。security.W004: 您沒有為
SECURE_HSTS_SECONDS
設定設定值。如果您的整個網站僅透過 SSL 提供,您可能需要考慮設定值並啟用 HTTP Strict Transport Security。請務必先閱讀文件;粗心地啟用 HSTS 可能會導致嚴重且不可逆轉的問題。security.W005: 您沒有將
SECURE_HSTS_INCLUDE_SUBDOMAINS
設定為True
。如果沒有此設定,您的網站可能會因與子網域的不安全連線而容易受到攻擊。只有在您確定網域的所有子網域都應僅透過 SSL 提供時,才將此設定為True
。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 攻擊。此檢查在 Django 3.0 中已移除,因為現代瀏覽器不再接受X-XSS-Protection
標頭。security.W008: 您的
SECURE_SSL_REDIRECT
設定未設定為True
。除非您的網站應透過 SSL 和非 SSL 連線提供,否則您可能需要將此設定設定為True
,或設定負載平衡器或反向 Proxy 伺服器以將所有連線重新導向至 HTTPS。security.W009: 您的
SECRET_KEY
少於 50 個字元、少於 5 個唯一字元,或是以'django-insecure-'
作為前綴,表示它是 Django 自動產生的。請產生一個長而隨機的值,否則許多 Django 的安全關鍵功能將容易受到攻擊。security.W010: 您的
INSTALLED_APPS
中有django.contrib.sessions
,但您沒有將SESSION_COOKIE_SECURE
設定為True
。使用僅限安全的 Session Cookie 可讓網路流量監聽器更難以劫持使用者工作階段。security.W011: 您的
MIDDLEWARE
中有django.contrib.sessions.middleware.SessionMiddleware
,但您沒有將SESSION_COOKIE_SECURE
設定為True
。使用僅限安全的 Session Cookie 可讓網路流量監聽器更難以劫持使用者工作階段。security.W012:
SESSION_COOKIE_SECURE
未設定為True
。使用僅限安全的 Session Cookie 可讓網路流量監聽器更難以劫持使用者工作階段。security.W013: 您的
INSTALLED_APPS
中有django.contrib.sessions
,但您沒有將SESSION_COOKIE_HTTPONLY
設定為True
。使用HttpOnly
Session Cookie 可讓跨網站指令碼攻擊更難以劫持使用者工作階段。security.W014: 您的
MIDDLEWARE
中有django.contrib.sessions.middleware.SessionMiddleware
,但您沒有將SESSION_COOKIE_HTTPONLY
設定為True
。使用HttpOnly
Session Cookie 可讓跨網站指令碼攻擊更難以劫持使用者工作階段。security.W015:
SESSION_COOKIE_HTTPONLY
未設定為True
。使用HttpOnly
Session Cookie 可讓跨網站指令碼攻擊更難以劫持使用者工作階段。security.W016:
CSRF_COOKIE_SECURE
未設定為True
。使用僅限安全的 CSRF Cookie 可讓網路流量監聽器更難以竊取 CSRF 權杖。security.W017:
CSRF_COOKIE_HTTPONLY
未設定為True
。使用HttpOnly
CSRF Cookie 可讓跨網站指令碼攻擊更難以竊取 CSRF 權杖。此檢查在 Django 1.11 中已移除,因為CSRF_COOKIE_HTTPONLY
設定沒有實際的好處。security.W018: 您不應該在部署環境中將
DEBUG
設定為True
。security.W019: 您的
MIDDLEWARE
中有django.middleware.clickjacking.XFrameOptionsMiddleware
,但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.E024:您已將
SECURE_CROSS_ORIGIN_OPENER_POLICY
設定為無效的值。security.W025:您的
SECRET_KEY_FALLBACKS[n]
少於 50 個字元、少於 5 個獨特字元,或者它以'django-insecure-'
為開頭,表示它是 Django 自動產生的。請產生一個長且隨機的值,否則 Django 的許多安全性關鍵功能將容易受到攻擊。
以下檢查會驗證您的安全性相關設定是否已正確配置
security.E100:
DEFAULT_HASHING_ALGORITHM
必須是'sha1'
或'sha256'
。此檢查出現在 Django 3.1 和 3.2 中。security.E101:CSRF 失敗視圖
'path.to.view'
沒有接受正確數量的引數。security.E102:無法匯入 CSRF 失敗視圖
'path.to.view'
。
訊號¶
signals.E001:
<handler>
使用對傳送者<app label>.<model>
的惰性參考連接到<signal>
訊號,但應用程式<app label>
未安裝或未提供模型<model>
。
模板¶
以下檢查會驗證您的 TEMPLATES
設定是否已正確配置
templates.E001:您的
TEMPLATES
中有'APP_DIRS': True
,但也在OPTIONS
中指定了'loaders'
。請移除APP_DIRS
或移除'loaders'
選項。此檢查已在 Django 5.1 中移除,因為系統檢查現在可能會引發ImproperlyConfigured
錯誤。templates.E002:
TEMPLATES
的OPTIONS
中的string_if_invalid
必須是字串,但得到:{value}
({type}
)。templates.E003:
<name>
用於多個模板標籤模組:<module list>
。此檢查在 Django 4.1.2 中變更為templates.W003
。templates.W003:
<name>
用於多個模板標籤模組:<module list>
。
翻譯¶
以下檢查會針對您的翻譯設定執行
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'
。urls.E009:您的 URL 模式
<pattern>
具有無效的視圖,請傳遞<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
的值必須是列表 (list) 或元組 (tuple)。admin.E005: 同時指定了
fieldsets
和fields
。admin.E006:
fields
的值包含重複的欄位。admin.E007:
fieldsets
的值必須是列表 (list) 或元組 (tuple)。admin.E008:
fieldsets[n]
的值必須是列表 (list) 或元組 (tuple)。admin.E009:
fieldsets[n]
的長度必須為 2。admin.E010:
fieldsets[n][1]
的值必須是字典 (dictionary)。admin.E011:
fieldsets[n][1]
的值必須包含鍵 (key)fields
。admin.E012:
fieldsets[n][1]
中有重複的欄位。admin.E013:
fields[n]/filter_horizontal[n]/filter_vertical[n]/fieldsets[n][m]
的值不能包含ManyToManyField
<欄位名稱>
,因為該欄位已手動指定關聯模型。admin.E014:
exclude
的值必須是列表 (list) 或元組 (tuple)。admin.E015:
exclude
的值包含重複的欄位。admin.E016:
form
的值必須繼承自BaseModelForm
。admin.E017:
filter_vertical
的值必須是列表 (list) 或元組 (tuple)。admin.E018:
filter_horizontal
的值必須是列表 (list) 或元組 (tuple)。admin.E019:
filter_vertical[n]/filter_horizontal[n]
參照到<欄位名稱>
,但此欄位並非<模型>
的欄位。admin.E020:
filter_vertical[n]/filter_horizontal[n]
必須是多對多 (many-to-many) 欄位。admin.E021:
radio_fields
的值必須是字典 (dictionary)。admin.E022:
radio_fields
參照到<欄位名稱>
,但此欄位並非<模型>
的欄位。admin.E023:
radio_fields
參照到<欄位名稱>
,但此欄位並非ForeignKey
的實例,也沒有choices
的定義。admin.E024:
radio_fields[<欄位名稱>]
的值必須是admin.HORIZONTAL
或admin.VERTICAL
。admin.E025:
view_on_site
的值必須是可呼叫 (callable) 的物件或布林值 (boolean)。admin.E026:
prepopulated_fields
的值必須是字典 (dictionary)。admin.E027:
prepopulated_fields
參照到<欄位名稱>
,但此欄位並非<模型>
的欄位。admin.E028:
prepopulated_fields
參照到<欄位名稱>
,但此欄位不得為DateTimeField
、ForeignKey
、OneToOneField
或ManyToManyField
欄位。admin.E029:
prepopulated_fields[<欄位名稱>]
的值必須是列表 (list) 或元組 (tuple)。admin.E030:
prepopulated_fields
參照到<欄位名稱>
,但此欄位並非<模型>
的欄位。admin.E031:
ordering
的值必須是列表 (list) 或元組 (tuple)。admin.E032:
ordering
的值含有隨機排序標記?
,但也包含其他欄位。admin.E033:
ordering
參照到<欄位名稱>
,但此欄位並非<模型>
的欄位。admin.E034:
readonly_fields
的值必須是列表 (list) 或元組 (tuple)。admin.E035:
readonly_fields[n]
參照到<欄位名稱>
,但此欄位並非可呼叫 (callable) 的物件、<ModelAdmin 類別>
的屬性或<模型>
的屬性。admin.E036:
autocomplete_fields
的值必須是列表 (list) 或元組 (tuple)。admin.E037:
autocomplete_fields[n]
參照到<欄位名稱>
,但此欄位並非<模型>
的欄位。admin.E038:
autocomplete_fields[n]
必須是外鍵 (foreign key) 或多對多 (many-to-many) 欄位。admin.E039: 模型
<模型>
的管理介面必須先註冊才能被<modeladmin>.autocomplete_fields
引用。admin.E040:
<modeladmin>
必須定義search_fields
,因為它被<其他modeladmin>.autocomplete_fields
引用。
ModelAdmin
¶
以下檢查會對任何向管理介面註冊的 ModelAdmin
執行
admin.E101:
save_as
的值必須是布林值 (boolean)。admin.E102:
save_on_top
的值必須是布林值 (boolean)。admin.E103:
inlines
的值必須是列表 (list) 或元組 (tuple)。admin.E104:
<InlineModelAdmin 類別>
必須繼承自InlineModelAdmin
。admin.E105:
<InlineModelAdmin 類別>
必須有model
屬性。admin.E106:
<InlineModelAdmin 類別>.model
的值必須是Model
。admin.E107:
list_display
的值必須是列表 (list) 或元組 (tuple)。admin.E108:
list_display[n]
參照到<標籤>
,但此標籤並非可呼叫 (callable) 的物件、<ModelAdmin 類別>
的屬性,或是<模型>
的屬性、方法或欄位。admin.E109:
list_display[n]
不得為多對多 (many-to-many) 欄位或反向外鍵。admin.E110:
list_display_links
的值必須是列表 (list)、元組 (tuple) 或None
。admin.E111:
list_display_links[n]
參照到<標籤>
,但此標籤未在list_display
中定義。admin.E112:
list_filter
的值必須是列表 (list) 或元組 (tuple)。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
的值必須是布林值(boolean)、元組(tuple)或列表(list)。admin.E118:
list_per_page
的值必須是整數(integer)。admin.E119:
list_max_show_all
的值必須是整數(integer)。admin.E120:
list_editable
的值必須是列表(list)或元組(tuple)。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
的值必須是列表(list)或元組(tuple)。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
的內聯(inline)的 InlineModelAdmin
執行。
admin.E201: 無法排除欄位
<field name>
,因為它是指向父模型<app_label>.<model>
的外鍵(foreign key)。admin.E202:
<model>
沒有指向<parent model>
的ForeignKey
。/<model>
有多個指向<parent model>
的ForeignKey
。您必須指定一個fk_name
屬性。admin.E203:
extra
的值必須是整數(integer)。admin.E204:
max_num
的值必須是整數(integer)。admin.E205:
min_num
的值必須是整數(integer)。admin.E206:
formset
的值必須繼承自BaseModelFormSet
。
GenericInlineModelAdmin
¶
以下檢查會針對任何註冊為 ModelAdmin
的內聯(inline)的 GenericInlineModelAdmin
執行。
admin.E301:
'ct_field'
參照到<label>
,但它並非<model>
上的一個欄位。admin.E302:
'ct_fk_field'
參照到<label>
,但它並非<model>
上的一個欄位。admin.E303:
<model>
沒有GenericForeignKey
。admin.E304:
<model>
沒有使用內容類型欄位<field name>
和物件 ID 欄位<field name>
的GenericForeignKey
。
AdminSite
¶
以下檢查會在預設的 AdminSite
上執行。
admin.E401: 為了使用管理應用程式,
django.contrib.contenttypes
必須在INSTALLED_APPS
中。admin.E402: 為了使用管理應用程式,如果使用預設的身份驗證後端,
django.contrib.auth.context_processors.auth
必須在DjangoTemplates
(TEMPLATES
)中啟用。admin.E403: 為了使用管理應用程式,必須在
TEMPLATES
中設定DjangoTemplates
的實例。admin.E404: 為了使用管理應用程式,
django.contrib.messages.context_processors.messages
必須在DjangoTemplates
(TEMPLATES
)中啟用。admin.E405: 為了使用管理應用程式,
django.contrib.auth
必須在INSTALLED_APPS
中。admin.E406: 為了使用管理應用程式,
django.contrib.messages
必須在INSTALLED_APPS
中。admin.E408: 為了使用管理應用程式,
django.contrib.auth.middleware.AuthenticationMiddleware
必須在MIDDLEWARE
中。admin.E409: 為了使用管理應用程式,
django.contrib.messages.middleware.MessageMiddleware
必須在MIDDLEWARE
中。admin.E410: 為了使用管理應用程式,
django.contrib.sessions.middleware.SessionMiddleware
必須在MIDDLEWARE
中。admin.W411: 為了使用管理導覽側邊欄,
django.template.context_processors.request
必須在DjangoTemplates
(TEMPLATES
)中啟用。
auth
¶
auth.E001:
REQUIRED_FIELDS
必須為列表 (list) 或元組 (tuple)。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
必須是屬性 (attribute) 或特性 (property),而不是方法 (method)。忽略此項會造成安全性問題,因為匿名使用者將被視為已驗證!auth.C010:
<User model>.is_authenticated
必須是屬性 (attribute) 或特性 (property),而不是方法 (method)。忽略此項會造成安全性問題,因為匿名使用者將被視為已驗證!auth.E011: 模型
<model>
的名稱必須最多 93 個字元,以使其內建權限名稱最多 100 個字元。auth.E012: 模型
<model>
的權限代碼<codename>
長度超過 100 個字元。auth.E013: 為了使用
django.contrib.auth.middleware.LoginRequiredMiddleware
,django.contrib.auth.middleware.AuthenticationMiddleware
必須在 MIDDLEWARE 中定義在其之前。
contenttypes
¶
當模型包含 GenericForeignKey
或 GenericRelation
時,會執行以下檢查
contenttypes.E001:
GenericForeignKey
物件 ID 參照到不存在的欄位<field>
。contenttypes.E002:
GenericForeignKey
內容類型參照到不存在的欄位<field>
。contenttypes.E003:
<field>
不是ForeignKey
。contenttypes.E004:
<field>
不是指向contenttypes.ContentType
的ForeignKey
。contenttypes.E005: 模型名稱必須最多 100 個字元。
postgres
¶
以下檢查會在 django.contrib.postgres
模型欄位上執行
postgres.E001: 陣列的基本欄位有錯誤:…
postgres.E002: 陣列的基本欄位不能是關聯欄位。
postgres.E003:
<field>
的預設值應該是一個可呼叫物件 (callable),而不是實例,這樣它才不會在所有欄位實例之間共享。此檢查在 Django 3.1 中已變更為fields.E010
。postgres.W004: 陣列的基本欄位有警告:…
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:
STATICFILES_DIRS
設定中的前綴<prefix>
不得結尾帶斜線。staticfiles.W004:
STATICFILES_DIRS
中的目錄<directory>
不存在。staticfiles.E005:
STORAGES
設定必須定義staticfiles
儲存空間。