システムチェックフレームワーク

システムチェックフレームワークは、Django プロジェクトを検証するための静的チェックのセットです。一般的な問題を検出し、それらを修正するヒントを提供します。このフレームワークは拡張性があり、独自のチェックを簡単に追加できます。

独自のチェックを追加し、Django のシステムチェックと統合する方法については、 システムチェックのトピックガイド を参照してください。

API リファレンス

CheckMessage

class CheckMessage(level, msg, hint=None, obj=None, id=None)[ソース]

システムチェックで発生する警告やエラーは CheckMessage のインスタンスでなければなりません。インスタンスは1つの報告可能なエラーや警告をカプセル化します。また、メッセージに適用されるコンテキストとヒント、フィルタリングに使用される一意の識別子も提供します。

コンストラクタの引数は以下の通りです:

level

The severity of the message. Use one of the predefined values: DEBUG , INFO, WARNING, ERROR, CRITICAL. If the level is greater or equal to ERROR, then Django will prevent management commands from executing. Messages with level lower than ERROR (i.e. warnings) are reported to the console, but can be silenced.

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: バージョンアップに伴う潜在的な問題にフラグを立てます。

  • commands: カスタム管理コマンドに関する設定をチェックします。

  • database: Checks database-related configuration issues. Database checks are not run by default because they do more than only static code analysis as most regular checks do. They are only run by the migrate command or if you specify configured database aliases using the --database option when calling the check command.

  • files: ファイル関連の設定をチェックします。

  • mail: Checks email related configuration.

  • 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 設定の値は通常 http://https:// のようなスキームで始まる必要がありますが、<hostname> が見つかりました。

キャッシュ

以下のチェックでは、CACHES 設定が正しく構成されていることを確認します:

  • caches.E001: CACHES 設定で 'default' キャッシュを定義する必要があります。

  • caches.W002: <cache> の設定が、キャッシュを公開したりデータの破損を招く可能性があります。なぜなら、その LOCATIONMEDIA_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: MySQL/MariaDB Strict Mode がデータベース接続 <alias> に設定されていません。 sql_mode の設定 も参照してください。

  • mysql.W003: MySQL/MariaDBでは、一意な CharFieldmax_length が255を超えることが許可されていない場合があります。

Mail

The following checks verify that your MAILERS setting is correctly configured:

  • mail.E001: Your MAILERS setting uses a development-only email backend in the 'default' entry (<backend>). (Only checked when the check --deploy option is used.)

  • mail.W001: Your MAILERS setting has no 'default' entry. Sending email without a valid mailer will fail.

ファイルの管理

次のチェックは、 ファイルの管理 の設定を検証します。

  • files.E001: FILE_UPLOAD_TEMP_DIR 設定は存在しないディレクトリ <path> を参照しています。

モデルフィールド

  • fields.E001: フィールド名はアンダースコアで終わってはいけません。

  • fields.E002: フィールド名には "__" を含めることはできません。

  • fields.E003: pk はフィールド名として使用できない予約語です。

  • fields.E004: choices must be a mapping (e.g. a dictionary) or an ordered iterable (e.g. a list or tuple, but not a set).

  • fields.E005: choices は実際の値と人間が読める名前のマッピング、または (実際の値, 人間が読める名前) タプルを含むイテラブルでなければなりません。

  • fields.E006: db_indexNoneTrueFalse のいずれかでなければいけません。

  • 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.E013: CompositePrimaryKey の名前は pk でなければなりません。

  • 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: DecimalFielddecimal_places 属性を定義しなければなりません。

  • fields.E131: decimal_places は非負の整数でなければなりません。

  • fields.E132: DecimalFieldmax_digits 属性を定義する必要があります。

  • fields.E133: max_digits は正の整数でなければなりません。

  • fields.E134: max_digitsdecimal_places 以上でなければなりません。

  • fields.E135: DecimalField’s max_digits and decimal_places must both be defined or both omitted.

  • fields.E140: FilePathFieldallow_files または allow_folders のどちらかを True に設定する必要があります。

  • fields.E150: GenericIPAddressFieldnull=False の場合 blank=True にすることはできません。空白の値は null として保存されるためです。

  • fields.E160: auto_nowauto_now_adddefault オプションは互いに排他的です。これらのオプションは1つしか指定できません。

  • fields.W161: 固定のデフォルト値が提供されました。

  • fields.W162: <database><field data type> カラムにデータベースインデックスをサポートしていません。

  • fields.W163: <database> では、列にコメント (db_comment) をサポートしていません。

  • fields.E170: BinaryFielddefault に文字列を使用することはできません。代わりにバイトコンテンツを使用してください。

  • 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.W225: null has no effect on GeneratedField.

  • 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: uniqueFileField の有効な引数ではありません。 このチェックは Django 1.11 で削除されました

  • fields.E201: primary_keyFileField に対して有効な引数ではありません。

  • fields.E202: FileFieldupload_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 はリストまたはタプルでなければなりません。 このチェックは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_togetherManyToManyField である <field name> を参照していますが、ManyToManyField はそのオプションではサポートされていません。

  • models.E014: ordering はタプルかリストでなければなりません (1つのフィールドだけで並び替えたい場合でも) 。

  • 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> には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.E042: <field name> は複合主キーに含めることはできません。

  • models.W042: 主キーの型を定義していないときは、自動作成の主キーが使用されます。デフォルトで django.db.models.AutoField です。このチェックは Django 3.2 - 5.2 で行われます。

  • models.W043: <database> は式のインデックスをサポートしていません。

  • models.W044: <database> は式に対するユニーク制約をサポートしていません。

  • models.W045: チェック制約 <constraint>RawSQL() 式が含まれているため、この制約はモデルの full_clean() 実行中には検証されません。

  • models.W046: <database> はテーブルにコメント(db_table_comment) をサポートしていません。

  • models.W047: <database> does not support UniqueConstraint.nulls_distinct.

  • models.E048: constraints/indexes/unique_togetherCompositePrimaryKey <field name> を参照していますが、これらのオプションでは CompositePrimaryKey はサポートされていません。

  • models.E049: constraints/indexes/unique_together が、複数の from_fields を持つ ForeignObject <field name> を参照しています。このオプションではサポートされていません。

  • models.E050: The model cannot have related fields with both database-level and Python-level on_delete variants.

管理コマンド

以下のチェックは、カスタム管理コマンドが正しく設定されているかどうかを検証します。

  • commands.E001: migratemakemigrations コマンドは同じ autodetector を使用する必要があります。

セキュリティ

セキュリティチェックはサイトを安全にするものではありません。コードの監査や侵入検知など、特に複雑な処理も行いません。その代わり、自動化された、簡単なチェックリストを実行して、サイトのセキュリティを向上させるのに役立ちます。

これらのチェックの中には、特定のデプロイメント構成に適切でないものもあるかもしれません。たとえば、HTTPからHTTPSへのリダイレクトをロードバランサーで行っている場合、 SECURE_SSL_REDIRECT が有効になっていないと常に警告されるのはイライラするでしょう。 SILENCED_SYSTEM_CHECKS を使って、不要なチェックを行わないようにしましょう。

check --deploy オプションを使用すると、以下のチェックが実行されます:

  • security.W001: MIDDLEWAREdjango.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.CsrfViewMiddlewareMIDDLEWARE にありません)。ミドルウェアを有効にすることが、セキュリティホールを作らないための最も安全な方法です。

  • 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_SECURETrue に設定していません。セキュアなセッションクッキーのみを使用することで、ネットワークトラフィックの傍受者がユーザーセッションを乗っ取ることがより困難になります。

  • security.W011: django.contrib.sessions.middleware.SessionMiddlewareMIDDLEWARE に設定していますが、 SESSION_COOKIE_SECURETrue に設定していません。セキュアオンリーのセッションクッキーを使用すると、ネットワークトラフィックの傍受者がユーザーセッションを乗っ取ることが難しくなります。

  • security.W012: SESSION_COOKIE_SECURETrue に設定されていません。セキュアオンリーのセッションクッキーを使用すると、ネットワークトラフィックの傍受者がユーザーセッションを乗っ取ることがより困難になります。

  • security.W013: django.contrib.sessionsINSTALLED_APPS にありますが、 SESSION_COOKIE_HTTPONLYTrue に設定していません。HttpOnly セッションクッキーを使用すると、クロスサイトスクリプティング攻撃によるユーザーセッションの乗っ取りが困難になります。

  • security.W014: MIDDLEWAREdjango.contrib.sessions.middleware.SessionMiddleware がありますが、SESSION_COOKIE_HTTPONLYTrue に設定していません。 HttpOnly セッションクッキーを使用すると、クロスサイトスクリプティング攻撃によるユーザーセッションの乗っ取りがより困難になります。

  • security.W015: SESSION_COOKIE_HTTPONLYTrue に設定されていません。 HttpOnly セッションクッキーを使用すると、クロスサイトスクリプティング攻撃によるユーザーセッションの乗っ取りが難しくなります。

  • security.W016: CSRF_COOKIE_SECURETrue に設定されていません。セキュアなCSRFクッキーのみを使用すると、ネットワークトラフィックの傍受者がCSRFトークンを盗むことが難しくなります。

  • security.W017: CSRF_COOKIE_HTTPONLYTrue に設定されていません。 HttpOnly CSRF クッキーを使うと、クロスサイトスクリプティング攻撃による CSRF トークンの盗用がより困難になります。 CSRF_COOKIE_HTTPONLY 設定は実用的な利点をもたらさないので、このチェックは Django 1.11 では削除されました。

  • security.W018: 本番環境で DEBUGTrue に設定してはいけません。

  • security.W019: MIDDLEWAREdjango.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' をインポートできませんでした。

  • security.E026: CSP 設定 <SETTING_NAME> は辞書でなければなりません(代わりに <value> が指定されています)。

  • security.W027: Your Content Security Policy includes CSP.NONCE and ContentSecurityPolicyMiddleware is enabled, but django.template.context_processors.csp is not configured.

シグナル

  • signals.E001: <handler> は送信元 <app label>.<model> への遅延参照で <signal> シグナルに接続されましたが、アプリ <app label> がインストールされていないか、モデル <model> を提供していません。

テンプレート

以下のチェックは、TEMPLATES 設定が正しく構成されているかどうかを確認します。

  • templates.E001: 'APP_DIRS': True が設定されている TEMPLATES 内で、同時に 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 からドル記号を削除してください。

  • 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.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: fieldsetsfields の両方が指定されています。

  • 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> を参照しており、これは DateTimeFieldForeignKeyOneToOneField、または 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 を定義する必要があります。

  • admin.E041: The value of delete_confirmation_max_display must be a non-negative integer or None.

ModelAdmin

管理サイトに登録されている ModelAdmin には、以下のチェックが行われます:

  • admin.E101: save_as の値は真偽値でなければなりません。

  • admin.E102: save_on_top の値は真偽値でなければなりません。

  • admin.E103: inlines の値はリストかタプルでなければなりません。

  • admin.E104: <InlineModelAdmin class>InlineModelAdmin から継承する必要があります。

  • admin.E105: <InlineModelAdmin class> には model 属性が必要です。

  • admin.E106: <InlineModelAdmin class>.model の値は Model 型でなければなりません。

  • admin.E107: list_display の値は、リストまたはタプルでなければなりません。

  • admin.E108: list_display[n] の値が <label> を参照していますが、これは <ModelAdmin class> の呼び出し可能なオブジェクトや属性、または <model> の属性、メソッド、フィールドではありません。

  • admin.E109: list_display[n] の値は、多対多のフィールドや逆参照外部キーであってはいけません。

  • 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_editablelist_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: <model>GenericForeignKey がありません。

  • admin.E302: 'ct_field'<label> を参照していますが、これは <model> 上のフィールドではありません。

  • admin.E303: 'ct_fk_field'<label> を参照していますが、これは <model> 上のフィールドではありません。

  • admin.E304: <model>GenericForeignKey が、コンテンツタイプのフィールド <field name> とオブジェクトIDのフィールド <field name> を使用していません。

AdminSite

デフォルトの AdminSite には、以下のチェックが実行されます。

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: 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>ForeignKeycontenttypes.ContentType に持っていません。

  • contenttypes.E005: モデルの名前は最大100文字でなければなりません。

  • contenttypes.E006: <field> cannot use the database-level on_delete variant.

postgres

django.contrib.postgres モデルフィールド、インデックス、制約に対しては、以下のチェックが実行されます。

  • postgres.E001: 配列のベース・フィールドに次のエラーがあります: ...

  • postgres.E002: 配列のベース・フィールドをリレーション先フィールドにすることはできません。

  • postgres.E003: <field> のデフォルト値はインスタンスではなく、呼び出し可能オブジェクトにすべきです。これによりすべてのフィールドインスタンスで共有されることがなくなります。このチェックは Django 3.1 で fields.E010 に変更されました。

  • postgres.W004: 配列のベース・フィールドに次の警告があります: ...

  • postgres.E005: <django.contrib.postgres feature> を使用するために、 'django.contrib.postgres'INSTALLED_APPS に含まれている必要があります。

sites

以下のチェックは CurrentSiteManager を使用しているモデルに対して行われます:

  • sites.E001: CurrentSiteManager<field name> というフィールドを見つけられませんでした。

  • sites.E002: CurrentSiteManager は、外部キーや多対多のフィールドではないため、<field> を使用できません。

以下のチェックは、django.contrib.sites が正しく設定されているかを確認します:

  • sites.E101: The SITE_ID setting must be of type <type>. or The SITE_ID setting failed to validate: <error>.

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 ストレージを定義する必要があります。