系統檢查框架

系統檢查框架是一組用於驗證 Django 專案的靜態檢查。它可以偵測常見的問題,並提供如何修復這些問題的提示。這個框架是可擴展的,所以您可以輕鬆加入自己的檢查。

有關如何加入您自己的檢查並將它們與 Django 的系統檢查整合的詳細資訊,請參閱系統檢查主題指南

API 參考

CheckMessage

class CheckMessage(level, msg, hint=None, obj=None, id=None)[原始碼]

系統檢查所發出的警告和錯誤必須是 CheckMessage 的實例。一個實例封裝了一個單一的可報告錯誤或警告。它也提供了適用於訊息的上下文和提示,以及用於過濾目的的唯一識別碼。

建構子引數為

level

訊息的嚴重性。使用其中一個預定義的值:DEBUGINFOWARNINGERRORCRITICAL。如果嚴重性等於或大於 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)[原始碼]
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 指令執行,或者當您在呼叫 check 指令時使用 --database 選項指定已設定的資料庫別名。

  • files:檢查與檔案相關的設定。

  • models:檢查模型、欄位和管理器的定義。

  • security:檢查與安全性相關的設定。

  • signals:檢查信號宣告和處理常式註冊。

  • sites:檢查 django.contrib.sites 設定。

  • staticfiles:檢查 django.contrib.staticfiles 設定。

  • templates:檢查範本相關的設定。

  • translation:檢查翻譯相關的設定。

  • urls:檢查 URL 設定。

某些檢查可能會註冊多個標籤。

核心系統檢查

非同步支援

以下檢查會驗證您的 非同步支援 設定。

向後相容性

相容性檢查會警告升級 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 不允許唯一 CharFieldmax_length > 255。此檢查在 Django 3.1 中變更為 mysql.W003,因為實際的最大大小取決於許多因素。

  • mysql.W002:資料庫連線 <alias> 未設定 MySQL/MariaDB 嚴格模式。另請參閱 設定 sql_mode

  • mysql.W003:MySQL/MariaDB 可能不允許唯一 CharFieldmax_length > 255。

管理檔案

以下檢查會驗證您的 管理檔案 設定。

模型欄位

  • fields.E001:欄位名稱不得以底線結尾。

  • fields.E002:欄位名稱不得包含 "__"

  • fields.E003pk 是一個保留字,不能用作欄位名稱。

  • fields.E004choices 必須是映射(例如字典)或可迭代物件(例如清單或元組)。

  • fields.E005choices 必須是實際值到人類可讀名稱的映射,或是包含 (實際值, 人類可讀名稱) 元組的可迭代物件。

  • fields.E006db_index 必須是 NoneTrueFalse

  • fields.E007:主鍵不得有 null=True

  • fields.E008:所有 validators 都必須是可呼叫的。

  • fields.E009max_length 太小,無法容納 choices 中最長的值(<count> 個字元)。

  • fields.E010<field> 預設值應該是可呼叫的,而不是實例,這樣它就不會在所有欄位實例之間共享。

  • fields.E011<database> 不支援使用表達式(db_default)的預設資料庫值。

  • fields.E012<expression> 無法在 db_default 中使用。

  • fields.E100AutoField 必須設定 primary_key=True。

  • fields.E110BooleanField 不接受 null 值。此檢查在 Django 2.1 中新增對 null 值支援之前出現。

  • fields.E120CharField 必須定義 max_length 屬性。

  • fields.E121max_length 必須是正整數。

  • fields.W122:與 <integer field type> 一起使用時,max_length 會被忽略。

  • fields.E130DecimalField 必須定義 decimal_places 屬性。

  • fields.E131decimal_places 必須是非負整數。

  • fields.E132DecimalField 必須定義 max_digits 屬性。

  • fields.E133max_digits 必須是正整數。

  • fields.E134max_digits 必須大於或等於 decimal_places

  • fields.E140FilePathField 必須將 allow_filesallow_folders 設定為 True。

  • fields.E150:如果 null=FalseGenericIPAddressField 不能有 blank=True,因為空白值會儲存為 null。

  • 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

  • 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: FileFieldupload_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: orderingorder_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_SECONDSSECURE_CONTENT_TYPE_NOSNIFFSECURE_REFERRER_POLICYSECURE_CROSS_ORIGIN_OPENER_POLICYSECURE_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.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> 使用對傳送者 <app label>.<model> 的惰性參考連接到 <signal> 訊號,但應用程式 <app label> 未安裝或未提供模型 <model>

模板

以下檢查會驗證您的 TEMPLATES 設定是否已正確配置

  • templates.E001:您的 TEMPLATES 中有 'APP_DIRS': True,但也在 OPTIONS 中指定了 'loaders'。請移除 APP_DIRS 或移除 'loaders' 選項。此檢查已在 Django 5.1 中移除,因為系統檢查現在可能會引發 ImproperlyConfigured 錯誤。

  • templates.E002TEMPLATESOPTIONS 中的 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> 無效。請確保 urlpatternspath() 和/或 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> 具有無效的視圖,請傳遞 <view>.as_view() 而不是 <view>

  • urls.W010:您的 URL 模式 <pattern> 有不匹配的 <angle bracket>

contrib 應用程式檢查

admin

管理檢查全部作為 admin 標籤的一部分執行。

以下檢查會針對在管理網站中註冊的任何 ModelAdmin (或子類別) 執行

  • admin.E001raw_id_fields 的值必須是列表或元組。

  • admin.E002raw_id_fields[n] 的值指的是 <field name>,這不是 <model> 的欄位。

  • admin.E003raw_id_fields[n] 的值必須是外鍵或多對多欄位。

  • admin.E004: fields 的值必須是列表 (list) 或元組 (tuple)。

  • admin.E005: 同時指定了 fieldsetsfields

  • 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.HORIZONTALadmin.VERTICAL

  • admin.E025: view_on_site 的值必須是可呼叫 (callable) 的物件或布林值 (boolean)。

  • admin.E026: prepopulated_fields 的值必須是字典 (dictionary)。

  • admin.E027: prepopulated_fields 參照到 <欄位名稱>,但此欄位並非 <模型> 的欄位。

  • admin.E028: prepopulated_fields 參照到 <欄位名稱>,但此欄位不得為 DateTimeFieldForeignKeyOneToOneFieldManyToManyField 欄位。

  • 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_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 的值必須是列表(list)或元組(tuple)。

  • admin.E127: date_hierarchy 的值參照到 <field name>,但它並未參照至一個欄位(Field)。

  • admin.E128: date_hierarchy 的值必須是 DateFieldDateTimeField

  • 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 上執行。

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.LoginRequiredMiddlewaredjango.contrib.auth.middleware.AuthenticationMiddleware 必須在 MIDDLEWARE 中定義在其之前。

contenttypes

當模型包含 GenericForeignKeyGenericRelation 時,會執行以下檢查

  • contenttypes.E001: GenericForeignKey 物件 ID 參照到不存在的欄位 <field>

  • contenttypes.E002: GenericForeignKey 內容類型參照到不存在的欄位 <field>

  • contenttypes.E003: <field> 不是 ForeignKey

  • contenttypes.E004: <field> 不是指向 contenttypes.ContentTypeForeignKey

  • 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

返回頂部