Django: モデルフィールドリファレンスの一覧

# Django: モデルフィールドリファレンスの一覧
[Djangoリファレンス本家(ver 1.11)のモデルフィールドリファレンスの説明](https://docs.djangoproject.com/ja/1.11/ref/models/fields/)を一覧にしたものです。なお、2017/11/15時点で日本語訳されていなかった箇所については意訳しています（内容無保証です）。
## [フィールドの型](https://docs.djangoproject.com/ja/1.11/ref/models/fields/#field-types)
Djangoのモデル定義ファイル(models.py等）内で row = models.XXXField(～） のように使用します

|フィールドの型|説明|
|---|---|
|AutoField|利用可能な ID に応じて、自動的にインクリメントする IntegerField です。通常は直接使う必要はありません; 指定しない場合は、主キーのフィールドが自動的にモデルに追加されます。Automatic primary key fields も参照してください。|
|BigAutoField|64 ビットの数値です。1 から 9223372036854775807 までの数を扱える以外は、AutoField と同じです。|
|BigIntegerField|64 ビットの数値です。-9223372036854775808 から 9223372036854775807 を扱える以外は IntegerField と同じです。このフィールドのデフォルトのフォームウィジェットは TextInput です。|
|BinaryField|生のバイナリデータを保持するためのフィールドです。bytes` のアサインメントのみをサポートします。このフィールドには機能制限があります。例えば、BinaryField の値でクエリセットをフィルタすることはできません。また、BinaryField を ModelForm に含めることもできません。|
|BooleanField|true/false のフィールドです。|
|CharField|小 - 大サイズの文字列のフィールドです。|
|CommaSeparatedIntegerField|バージョン 1.9 で撤廃:カンマによって区切られた数値のフィールドです。CharField と同じく、max_length 引数が必須で、そこで説明したデータベースの可搬性についての注意を考慮する必要があります。|
|DateField|Python で datetime.date インスタンスによって表される日付です。多少の追加的な省略可能な引数を持ちます:|
|DateTimeField|Python で datetime.datetime インスタンスによって表される日付と時刻です。DateField と同じくいくつかの追加的な引数を持ちます:|
|DecimalField|Python で Decimal インスタンスによって表される固定精度の小数です。2 つの 必須の 引数があります:|
|DurationField|時刻の期間を保持するフィールドで、 Python の timedelta によってモデル化されます。PostgreSQL で使われるときに用いられるデータ型は interval で、Oracle でのデータ型は INTERVAL DAY(9) TO SECOND(6)``です。 それ以外では、マイクロ秒の ``bigint が使われます。|
|EmailField|値が有効な E メールアドレスかチェックする CharField です。EmailValidator を使ってインプットを検証します。|
|FileField|ファイルアップロードのフィールドです。|
|FileField と FieldFile|モデル上の FileField にアクセスするとき、元となるファイルにアクセスするためのプロキシとして、FieldFile のインスタンスが与えられます。|
|FilePathField|ファイルシステム上の特定のディレクトリ内のファイル名に選択肢が制限されている CharField です。3 つの特別な引数があり、最初の 1 つは 必須 です:|
|FloatField|float インスタンスによって表される Python の浮動小数点数です。|
|ImageField|FileField から全ての属性とメソッドを継承して、さらにアップロードされたオブジェクトが有効な画像であることを検証します。|
|IntegerField|数値です。-2147483648 から 2147483647 までの値は、Django でサポートされているデータベース内では安全です。このフィールドのデフォルトのフォームウィジェットは、localize が False のときには NumberInput で、そうでなければ TextInput となります。|
|GenericIPAddressField|IPv4 か IPv6 のアドレスで、文字列フォーマットです (例: 192.0.2.30 ないし 2a02:42fe::4)。このフィールドのデフォルトのフォームウィジェットは TextInput です。|
|NullBooleanField|BooleanField とほぼ同じですが、オプションの 1 つとして NULL を許容します。BooleanField を null=True で使う代わりにこれを使ってください。このフィールドのデフォルトのフォームウィジェットは NullBooleanSelect です。|
|PositiveIntegerField|IntegerField とほぼ同じですが、正の値かゼロ (0) でなければなりません。Django によってサポートされる全てのデータベースで、0 から 2147483647 までの値は安全です。後方互換性の理由から、値 0 が有効となっています。|
|PositiveSmallIntegerField|PositiveIntegerField とほぼ同じですが、特定の (データベースに依存した) ポイントより下の値のみを許容します。Django でサポートされている全てのデータベースで、0 から 32767 までの値は安全です。|
|SlugField|Slug は新聞の用語です。 スラグは、文字、数字、アンダースコア、またはハイフンのみを含む短いラベルです。 一般的に URL 内で使用されます。|
|SmallIntegerField|IntegerField とほぼ同じですが、特定の (データベースに依存した) ポイントより下の値のみを許容します。Django でサポートされている全てのデータベースで、-32768 から 32767 までの値は安全です。|
|TextField|多量のテキストのフィールドです。このフィールドのデフォルトのフォームウィジェットは Textarea です。|
|TimeField|Python で datetime.time インスタンスによって表される時刻です。DateField と同じ自動入力されるオプションを受け入れます。|
|URLField|URL のための CharField です。|
|UUIDField|UUID (Universally Unique Identifier) を保持するためのフィールドです。Python’s UUID クラスを使います。 PostgreSQL 上で使われるとき、uuid データ型の中に保持します。それ以外は char(32) の中に保持します。|

## [フィールドオプション](https://docs.djangoproject.com/ja/1.11/ref/models/fields/#field-options)
以下の引数は全てのフィールドタイプで有効です。全て省略可能です。

|フィールドオプション|説明|
|---|---|
|null|Trueの場合、Django はデータベース内に NULL として空の値を保持します。デフォルトは False です。|
|blank|True の場合、フィールドはブランクになることが許容されます。デフォルトは False です。|
|choices|フィールドに対する選択肢として使うための 2 項目の iterable 自体で構成される ([(A, B), (A, B) ...]) iterable (例: リストやタプル) です。これが与えられた場合は、デフォルトのフォームウィジェットは、標準のテキストフィールドの代わりに、選択肢を伴ったセレクトボックスになります。|
|db_column|このフィールドに使用するデータベース列の名前。 これが与えられなければ、Djangoはフィールドの名前を使用します。|
|db_index|True の場合、データベースインデックスがこのフィールドのために生成されます。|
|db_tablespace|このフィールドの索引に使用するデータベースのテーブル領域の名前（このフィールドが索引付けされている場合）。 デフォルトでは、プロジェクトのDEFAULT_INDEX_TABLESPACE設定（設定されている場合）またはモデルのdb_tablespace（存在する場合）です。 バックエンドが索引のテーブルスペースをサポートしていない場合、このオプションは無視されます。|
|default|そのフィールドのデフォルト値です。このオプションには特定の値もしくは呼び出し可能オブジェクトを渡すことができます。もし渡した値が呼び出し可能であれば新しくオブジェクトが生成される度に呼び出されます。|
|editable|Falseの場合、フィールドは管理者または他のModelFormに表示されません。 モデルの検証中もスキップされます。 デフォルトはTrueです。|
|error_messages|error_messages引数を使用すると、フィールドが生成するデフォルトのメッセージを上書きできます。 オーバーライドするエラーメッセージに一致するキーを持つ辞書を渡します。|
|help_text|フォームウィジェットと共に表示される 「補助」 テキストになります。この値はフィールドがフォームとして利用されない場合でもドキュメント化する際に有用です。|
|primary_key|True の場合、設定したフィールドはそのモデルの主キーとなります。|
|unique|True の場合、そのフィールドはテーブル上で一意となる制約を受けます。|
|unique_for_date|これをDateFieldまたはDateTimeFieldの名前に設定し、このフィールドが日付フィールドの値に対して一意であることを要求します。|
|unique_for_month|unique_for_dateと同様ですが、フィールドはその月に関してユニークである必要があります。|
|unique_for_year|unique_for_dateやunique_for_monthと同様です。|
|verbose_name|人間が判読可能なフィールド名。 冗長な名前が与えられていない場合、Djangoはそのフィールドの属性名を使って自動的に作成し、アンダースコアをスペースに変換します。 Verboseフィールド名を参照してください。|
|validators|このフィールドで実行するバリデータのリスト。 詳細については、バリデータのドキュメントを参照してください。|

## [リレーションシップフィールド](https://docs.djangoproject.com/ja/1.11/ref/models/fields/#module-django.db.models.fields.related)

|フィールド|説明|
|---|---|
|ForeignKey|多対1の関係。2つの位置引数が必要です：モデルが関連するクラスとon_deleteオプション。 （on_deleteは実際には必要ではありませんが、提供していないと推奨されません.Django 2.0では必須です）。|
|ManyToManyField|多対多の関係。位置の引数が必要です。モデルが関連するクラスです。これは、再帰的および遅延的な関係を含むForeignKeyとまったく同じ働きをします。|
|OneToOneField|1対1の関係。概念的には、これはunique = Trueを持つForeignKeyに似ていますが、リレーションの「リバース」側は1つのオブジェクトを直接返します。|

## [Field APIリファレンス](https://docs.djangoproject.com/ja/1.11/ref/models/fields/#field-api-reference)
Fieldは、データベーステーブルの列を表す抽象クラスです。DjangoはFieldを使ってデータベーステーブル（db_type()）を作成し、Python型をデータベース（get_prep_value()）にマッピングし、逆もまた同様です（from_db_value()）。

|API|説明|
|---|---|
|get_internal_type()|バックエンド固有の目的でこのフィールドの名前を表す文字列を返します。 デフォルトでは、クラス名が返されます。|
|db_type(connection)|接続を考慮して、Fieldのデータベース列データ型を返します。|
|rel_db_type(connection)|接続を考慮して、Fieldを指すForeignKeyやOneToOneFieldなどのフィールドのデータベース列のデータ型を返します。|
|get_prep_value(value)|valueはモデルの属性の現在の値です。このメソッドは、クエリのパラメータとして使用するために用意された形式でデータを返します。|
|get_db_prep_value(value, connection, prepared=False)|valueをバックエンド固有の値に変換します。 デフォルトでは、prepared = Trueの場合は値を返し、falseの場合はget_prep_value()を返します。|
|from_db_value(value, expression, connection, context)|データベースから返された値をPythonオブジェクトに変換します。 これはget_prep_value()の逆です。|
|get_db_prep_save(value, connection)|get_db_prep_value()と同じですが、フィールド値をデータベースに保存する必要がある場合に呼び出されます。 デフォルトでは、get_db_prep_value()が返されます。|
|pre_save(model_instance, add)|保存する前すべてのFieldインスタンスには、動作のイントロスペクションを可能にする複数の属性が含まれています。 フィールドの機能に依存するコードを記述する必要がある場合は、isinstanceチェックの代わりにこれらの属性を使用します。 これらの属性は、Model._meta APIとともに使用して、特定のフィールドタイプの検索を絞り込むことができます。 カスタムモデルフィールドはこれらのフラグを実装する必要があります。

## [フィールド属性リファレンス](https://docs.djangoproject.com/ja/1.11/ref/models/fields/#field-attribute-reference)
### フィールドのための属性
すべてのFieldインスタンスには、動作のイントロスペクションを可能にする複数の属性が含まれています。フィールドの機能に依存するコードを記述する必要がある場合は、isinstanceチェックの代わりにこれらの属性を使用します。これらの属性は、Model._meta APIとともに使用して、特定のフィールドタイプの検索を絞り込むことができます。カスタムモデルフィールドはこれらのフラグを実装する必要があります。

|フィールドのための属性|説明|
|---|---|
|Field.auto_created|モデルの継承で使用されるOneToOneFieldなど、フィールドが自動的に作成されたかどうかを示すBooleanフラグ。|
|Field.concrete|フィールドに関連付けられたデータベース列がフィールドにあるかどうかを示すBooleanフラグ。|
|Field.hidden|フィールドが他の隠されていないフィールドの機能(例えば、GenericForeignKeyを構成するcontent_typeとobject_idフィールド)を後退させるために使用されるかどうかを示す真偽フラグ。 hiddenフラグは、モデル上のフィールドの公開サブセットを構成するものと、モデル上のすべてのフィールドを区別するために使用されます。|
|Field.is_relation|フィールドに、その機能に関する1つ以上の他のモデルへの参照が含まれているかどうかを示す真偽フラグ（ForeignKey、ManyToManyField、OneToOneFieldなど）。|
|Field.model|フィールドが定義されているモデルを返します。 フィールドがモデルのスーパークラスに定義されている場合、モデルはインスタンスのクラスではなくスーパークラスを参照します。|

### フィールドリレーションのための属性
これらの属性は、カーディナリティやリレーションの詳細をクエリするために使用されます。 これらの属性はすべてのフィールドに存在します。 ただし、フィールドがリレーションタイプ（Field.is_relation = True）の場合、ブール値（Noneではなく）のみを持ちます。

|フィールドリレーションのための属性|説明|
|---|---|
|Field.many_to_many|フィールドに多対多リレーションがある場合はTrueのブールフラグ。 そうでなければFalse。 これがTrueのDjangoに含まれる唯一のフィールドはManyToManyFieldです。|
|Field.many_to_one|フィールドが多対1の関係を持つ場合は、BooleanKey（ForeignKeyなど）。 そうでなければFalse。|
|Field.one_to_many|フィールドに1対多のリレーションがある場合はTrue、ブール値はGenericRelationまたはForeignKeyの逆数などのブールフラグです。 そうでなければFalse。|
|Field.one_to_one|FieldがOneToOneFieldのように一対一のリレーションを持つ場合はTrueのブールフラグ。 そうでなければFalse。|
|Field.related_model|フィールドが関連するモデルを指します（ 例：ForeignKey(Author, on_delete = models.CASCADE) 内でのAuthor ）。 GenericForeignKeyのrelated_modelは常にNoneです。|