401
385

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-15

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

Djangoリファレンス本家(ver 1.11)のモデルフィールドリファレンスの説明を一覧にしたものです。なお、2017/11/15時点で日本語訳されていなかった箇所については意訳しています(内容無保証です)。

フィールドの型

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) の中に保持します。

フィールドオプション

以下の引数は全てのフィールドタイプで有効です。全て省略可能です。

フィールドオプション 説明
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 このフィールドで実行するバリデータのリスト。 詳細については、バリデータのドキュメントを参照してください。

リレーションシップフィールド

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

Field APIリファレンス

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とともに使用して、特定のフィールドタイプの検索を絞り込むことができます。 カスタムモデルフィールドはこれらのフラグを実装する必要があります。

フィールド属性リファレンス

フィールドのための属性

すべての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です。
401
385
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
401
385

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?