システムチェックフレームワーク¶
システムチェックフレームワークは、Django プロジェクトを検証するための静的チェックのセットです。一般的な問題を検出し、それらを修正するヒントを提供します。このフレームワークは拡張性があり、独自のチェックを簡単に追加できます。
独自のチェックを追加し、Django のシステムチェックと統合する方法については、 システムチェックのトピックガイド を参照してください。
API リファレンス¶
CheckMessage
¶
システムチェックで発生する警告やエラーは 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
は省略できます。
コアシステムチェック¶
非同期サポート¶
以下のチェックは、非同期サポート のセットアップを検証します。
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
is deprecated. Support for it (except in historical migrations) will be removed in Django 5.1. This check appeared in Django 4.2 and 5.0.fields.E905:
django.contrib.postgres.fields.CICharField
is removed except for support in historical migrations.fields.W906:
django.contrib.postgres.fields.CIEmailField
is deprecated. Support for it (except in historical migrations) will be removed in Django 5.1. This check appeared in Django 4.2 and 5.0.fields.E906:
django.contrib.postgres.fields.CIEmailField
is removed except for support in historical migrations.fields.W907:
django.contrib.postgres.fields.CITextField
is deprecated. Support for it (except in historical migrations) will be removed in Django 5.1. This check appeared in Django 4.2 and 5.0.fields.E907:
django.contrib.postgres.fields.CITextField
is removed except for support for historical migrations.
ファイルフィールド¶
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
must be a list or tuple. This check appeared before Django 5.1.models.E009: All
index_together
elements must be lists or tuples. This check appeared before Django 5.1.models.E010:
unique_together
はリストまたはタプルでなければなりません。models.E011: すべての
unique_together
要素はリストまたはタプルでなければなりません。models.E012:
constraints/indexes/unique_together
refers to the nonexistent field<field name>
.models.E013:
constraints/indexes/unique_together
refers to aManyToManyField
<field name>
, butManyToManyField
s are not supported for that option.models.E014:
ordering
はタプルかリストでなければなりません (1つのフィールドだけで並び替えたい場合でも) 。models.E015:
ordering
は存在しないフィールド、リレーション先フィールド、またはルックアップ<field name>
を指しています。models.E016:
constraints/indexes/unique_together
refers to field<field_name>
which is not local to model<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>
には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
に設定されていません。HttpOnly
CSRF クッキーを使うと、クロスサイトスクリプティング攻撃による 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: You have
'APP_DIRS': True
in yourTEMPLATES
but also specify'loaders'
inOPTIONS
. Either removeAPP_DIRS
or remove the'loaders'
option. This check is removed in Django 5.1 as system checks may now raiseImproperlyConfigured
instead.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
からドル記号を削除してください。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: The value of
list_display[n]
refers to<label>
, which is not a callable or attribute of<ModelAdmin class>
, or an attribute, method, or field on<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 文字より長いです。auth.E013: In order to use
django.contrib.auth.middleware.LoginRequiredMiddleware
,django.contrib.auth.middleware.AuthenticationMiddleware
must be defined before it in MIDDLEWARE.
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
ストレージを定義する必要があります。