システムチェックフレームワーク¶
システムチェックフレームワークは、Django プロジェクトを検証するための静的チェックのセットです。一般的な問題を検出し、それらを修正するヒントを提供します。このフレームワークは拡張性があり、独自のチェックを簡単に追加できます。
独自のチェックを追加し、Django のシステムチェックと統合する方法については、 システムチェックのトピックガイド を参照してください。
API リファレンス¶
CheckMessage¶
-
class
CheckMessage(level, msg, hint=None, obj=None, id=None)¶
システムチェックで発生する警告やエラーは CheckMessage のインスタンスでなければなりません。インスタンスは1つの報告可能なエラーや警告をカプセル化します。また、メッセージに適用されるコンテキストとヒント、フィルタリングに使用される一意の識別子も提供します。
コンストラクタの引数は以下の通りです:
level- メッセージの重大度。定義済みの値、
debug、info、warning、error、criticalのいずれかを使用します。レベルがERROR以上の場合、Django は管理コマンドの実行を抑止します。レベルがERRORより低いメッセージ (つまり警告) はコンソールに報告されますが、抑制することもできます。 msg- 問題を説明する短い (80 文字未満) 文字列。文字列には改行を含めてはいけません。
hint- 問題を解決するためのヒントを示す1行の文字列。ヒントを提供できない場合、またはヒントがエラーメッセージから明らかな場合は、ヒントを省略するか、
Noneを使用できます。 obj- オプション。メッセージのコンテキストを提供するオブジェクト (例えば、問題が発見されたモデル)。オブジェクトはモデル、フィールド、マネージャ、または
__str__()メソッドを定義する他のオブジェクトでなければなりません。このメソッドはすべてのメッセージを報告するときに使用され、その結果はメッセージの前に置かれます。 id- オプションの文字列。issueの一意な識別子。識別子は
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: 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の構成をチェックします。
いくつかのチェックは複数のタグで登録されていれる可能性があります。
コアシステムチェック¶
非同期サポート¶
以下のチェックは、非同期サポート のセットアップを検証します。
- 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設定の値は通常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: MySQL/MariaDB Strict Mode がデータベース接続
<alias>に設定されていません。 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:
max_lengthは<integer field type>と一緒に使用した場合、無視されます。 - 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:
GenericIPAddressFieldはnull=Falseの場合blank=Trueにすることはできません。空白の値は null として保存されるためです。 - fields.E160:
auto_now、auto_now_add、defaultオプションは互いに排他的です。これらのオプションは1つしか指定できません。 - 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>のデータベース照合順序 (collation) をサポートしていません。 - 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 でサポートが削除されます。 - fields.W906:
django.contrib.postgres.fields.CIEmailFieldは非推奨です。Django 5.1 では、このフィールドのサポート (履歴マイグレーション以外) が削除されます。 - fields.W907:
django.contrib.postgres.fields.CITextFieldは非推奨です。Django 5.1 では (履歴マイグレーションを除いて) サポートが削除されます。
ファイルフィールド¶
- fields.E200:
uniqueはFileFieldの有効な引数ではありません。 このチェックは Django 1.11 で削除されました 。 - fields.E201:
primary_keyはFileFieldに対して有効な引数ではありません。 - fields.E202:
FileFieldのupload_to引数は絶対パスではなく、相対パスでなければなりません。 - fields.E210: Pillow がインストールされていないため、
ImageFieldを使用できません。
モデル¶
- models.E001:
<swappable>がapp_label.app_nameの形式ではありません。 - models.E002:
<SETTING>は<model>を参照していますが、インストールされていないか抽象的です。 - models.E003: モデルには、中間モデル
<app_label>.<model>を介した同一の多対多のリレーションが 2 つあります。 - 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はタプルかリストでなければなりません (1つのフィールドだけで並び替えたい場合でも) 。 - models.E015:
orderingは存在しないフィールド、リレーション先フィールド、またはルックアップ<field name>を指しています。 - models.E016:
constraints/indexes/index_together/unique_togetherは、モデル<model>に属していないフィールド<field_name>を参照しています。 - 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>には2重のアンダースコアを含めることはできません。これはクエリルックアップの構文と衝突するためです。 - 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: モデル
<model>に対して制約名<constraint>が一意ではありません。 - 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>は、遅延可能 (deferrable) なユニーク制約をサポートしていません。 - 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 組み込みのクロスサイトリクエストフォージェリ (CSRF) 防御を使っていないようです (
django.middleware.csrf.CsrfViewMiddlewareがMIDDLEWAREにありません)。ミドルウェアを有効にすることが、セキュリティホールを作らないための最も安全な方法です。 - 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にするか、ロードバランサーまたはリバースプロキシサーバーですべての接続をHTTPSにリダイレクトするように設定してください。 - security.W009: あなたの
SECRET_KEYの文字数が 50 文字未満か、一意な文字が 5 文字未満か、 Django が自動的に生成したことを示す'django-insecure-'が先頭に付いています。長くてランダムな値を生成してください。そうしないと、 Django のセキュリティ上重要な機能の多くが攻撃に対して脆弱になります。 - security.W010:
django.contrib.sessionsモジュールがINSTALLED_APPSにありますが、SESSION_COOKIE_SECUREをTrueに設定していません。セキュアなセッションクッキーのみを使用することで、ネットワークトラフィックの傍受者がユーザーセッションを乗っ取ることがより困難になります。 - security.W011:
django.contrib.sessions.middleware.SessionMiddlewareをMIDDLEWAREに設定していますが、SESSION_COOKIE_SECUREをTrueに設定していません。セキュアオンリーのセッションクッキーを使用すると、ネットワークトラフィックの傍受者がユーザーセッションを乗っ取ることが難しくなります。 - security.W012:
SESSION_COOKIE_SECUREがTrueに設定されていません。セキュアオンリーのセッションクッキーを使用すると、ネットワークトラフィックの傍受者がユーザーセッションを乗っ取ることがより困難になります。 - security.W013:
django.contrib.sessionsがINSTALLED_APPSにありますが、SESSION_COOKIE_HTTPONLYをTrueに設定していません。HttpOnlyセッションクッキーを使用すると、クロスサイトスクリプティング攻撃によるユーザーセッションの乗っ取りが困難になります。 - security.W014:
MIDDLEWAREにdjango.contrib.sessions.middleware.SessionMiddlewareがありますが、SESSION_COOKIE_HTTPONLYをTrueに設定していません。HttpOnlyセッションクッキーを使用すると、クロスサイトスクリプティング攻撃によるユーザーセッションの乗っ取りがより困難になります。 - security.W015:
SESSION_COOKIE_HTTPONLYがTrueに設定されていません。HttpOnlyセッションクッキーを使用すると、クロスサイトスクリプティング攻撃によるユーザーセッションの乗っ取りが難しくなります。 - security.W016:
CSRF_COOKIE_SECUREがTrueに設定されていません。セキュアなCSRFクッキーのみを使用すると、ネットワークトラフィックの傍受者がCSRFトークンを盗むことが難しくなります。 - security.W017:
CSRF_COOKIE_HTTPONLYがTrueに設定されていません。HttpOnlyCSRF クッキーを使うと、クロスサイトスクリプティング攻撃による CSRF トークンの盗用がより困難になります。CSRF_COOKIE_HTTPONLY設定は実用的な利点をもたらさないので、このチェックは Django 1.11 では削除されました。 - 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 が自動的に生成したことを示す'django-insecure-'が先頭に付いています。長くてランダムな値を生成してください。そうしないと、 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:
'APP_DIRS': TrueがTEMPLATESにあり、同時にOPTIONSで'loaders'を指定しています。APP_DIRSを削除するか、'loaders'オプションを削除してください。 - templates.E002:
TEMPLATESOPTIONS内の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からドル記号を削除してください。 - 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>の代わりに<view>.as_view()を渡してください。 - urls.W010: URL パターン
<pattern>に一致しない<angle bracket>があります。
contrib アプリのチェック¶
admin¶
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]/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.HORIZONTALまたはadmin.VERTICALでなければなりません。 - admin.E025:
view_on_siteの値は呼び出し可能オブジェクトか真偽値でなければなりません。 - admin.E026:
prepopulated_fieldsの値は辞書でなければなりません。 - admin.E027:
prepopulated_fieldsの値は、<model>のフィールドである<field name>を参照していますが、存在しません。 - admin.E028:
prepopulated_fieldsの値は<field name>を参照しており、これはDateTimeField、ForeignKey、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:
<modeladmin>.autocomplete_fieldsによって参照されるため、モデル<model>の admin が登録されている必要があります。 - admin.E040:
<modeladmin>は、<other_modeladmin>.autocomplete_fieldsで参照されているため、search_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 クラス>の属性、<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>を参照していますが、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]の値は<model>のフィールドではない<label>を参照しています。 - 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>は<parent model>へのForeignKeyを持っていません。/<model>は<parent model>へ複数のForeignKeyを持っています。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 には、以下のチェックが実行されます。
- admin.E401: admin アプリケーションを使用するには、
INSTALLED_APPSにdjango.contrib.contenttypesを含める必要があります。 - admin.E402: デフォルトの認証バックエンドを使用する場合、admin アプリケーションを使用するためには、
TEMPLATES(DjangoTemplates) でdjango.contrib.auth.context_processors.authを有効にする必要があります。 - admin.E403: admin アプリケーションを使用するには、
TEMPLATESでdjango.template.backends.django.DjangoTemplatesインスタンスを設定する必要があります。 - admin.E404: admin アプリケーションを使用するには、
DjangoTemplates(TEMPLATES) でdjango.contrib.messages.context_processors.messagesを有効にする必要があります。 - admin.E405: admin アプリケーションを使用するには、
INSTALLED_APPSにdjango.contrib.authを含める必要があります。 - admin.E406: admin アプリケーションを使用するには
django.contrib.messagesがINSTALLED_APPSに入っていなければなりません。 - admin.E408: admin アプリケーションを使用するには
django.contrib.auth.middleware.AuthenticationMiddlewareをMIDDLEWAREに設定する必要があります。 - admin.E409: admin アプリケーションを使用するには
django.contrib.messages.middleware.MessageMiddlewareがMIDDLEWAREに入っていなければなりません。 - admin.E410: admin アプリケーションを使用するには
django.contrib.sessions.middleware.SessionMiddlewareがMIDDLEWAREに入っていなければなりません。 - admin.W411: admin のナビゲーション・サイドバーを使うには、
DjangoTemplates(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: モデル
<model>に対して、パーミッションコード名<codename>が重複しています。 - auth.E007: モデル
<model>のverbose_nameは、組み込みのパーミッション名が最大 255 文字になるように、最大 244 文字でなければなりません。 - auth.E008: モデル
<model>の<name>というパーミッションが 255 文字より長いです。 - auth.C009:
<User model>.is_anonymousはメソッドではなく、属性またはプロパティでなければなりません。これを無視すると匿名ユーザーが認証済みとして扱われるため、セキュリティ上の問題となります! - auth.C010:
<User model>.is_authenticatedはメソッドではなく属性またはプロパティでなければなりません。これを無視すると匿名ユーザーが認証済みとして扱われるため、セキュリティ上の問題となります! - auth.E011: モデル
<model>の名前は、組み込みのパーミッション名が100文字以下になるように、最大93文字にする必要があります。 - 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に変更されました。 - 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:
<directory>というディレクトリは、STATICFILES_DIRS内に存在しません。 - staticfiles.E005:
STORAGES設定はstaticfilesストレージを定義する必要があります。