スポンサーリンク

【Django】モデルのフィールドタイプ一覧

スポンサーリンク
スポンサーリンク
この記事は約7分で読めます。

Djangoのモデルのフィールドタイプについて

Djangoはmodels.pyでモデルを作成することでデータベースのテーブルに対応するものを作成することができる。

この記事では、モデルフィールドタイプについてまとめる。

 

以下の記事は各モデルフィールドタイプが持つオプションについてまとめている。

【Django】モデルのフィールドオプション一覧

 

モデルのフィールドタイプ一覧

 

AutoField

 

概要

IDとして使われる自動インクリメントされるIntegerField。

(IntegerFieldもモデルフィールドタイプとして別で存在する。)

-2147483648から214748364の数字を扱うことができる。

models.pyでモデルを定義した際、自動でIDとなるフィールドを作成してくれるが、その際に使われる。ブログアプリで言えば、ブログ記事はIDで1,2,3,・・・と附番されるが、新しく記事を1つ作成した際に自動で最新のIDに1を加えて(インクリメント)IDを附番してくれる。

 

各モデルにはprimary_key=Trueのオプションを持つフィールドが必ず1つ存在しなければならない。自分で明示的に宣言しない場合は、主キーのフィールドとして自動的に作成される。

 

オプション

 

 

 

BigAutoField

 

概要

64ビット版のAutoField。1から9223372036854775807までの数を扱うことができる以外はAutoFieldと同じ。

 

オプション

 

 

 

BigIntegerField

 

概要

64ビット版のIntegerField。-9223372036854775808から9223372036854775807までの数値が収まることが保証されている。このフィールドのデフォルトのフォームウィジェットはNumberInput。

 

オプション

 

 

BinaryField

概要

バイナリデータを保存するためのフィールド。

デフォルト設定では編集不可。

オプション

max_length=None,

**options

 

 

BooleanField

 

概要

True/Falseのみのフィールド。Field.defaultが定義されていない場合のデフォルト設定はNone。フォームウィジェットにはCheckboxInputか、オプションでnull=TrueならNullBooleanSelectが使用される。

 

オプション

 

 

CharField

 

概要

文字列のフィールド。文字を入力することができる。

フォームウィジェットはTextInput。

多量のテキストを扱う時はTextFieldを使う。

DBによってはmax_lengthに制限があるため使用するDBの仕様に注意が必要。

 

オプション

・max_length=None

CharaFieldのフィールドに何文字入力できるか最大長を指定できる。

 

・db_collation

 

 

TextField

 

概要

CharFieldと同様に文字を入力できるフィールド。

フォームウィジェットはTextareaが使用される。

 

オプション

・max_length

入力できる文字列の最大長を指定できる。

これはフォーム上での制限であり、DBレベルでの制限ではない。

 

・db_collation

 

DateField

 

概要

年、月、日の情報を保持するフィールド。

フィールド上で保持されるデータはPythonのdatetime.dateインスタンスによってあらわされる。

 

オプション

・auto_now=False

オブジェクトが保存されるたび(レコードが更新されるたび)に自動で現在の日付をセットする。デフォルト設定はFalse。

レコードの更新時のタイムスタンプに役立つ。

Model.save()が呼ばれた時にはこのフィールドが更新されるが、Queryset.update()では更新されない。操作によって更新されない場合があるので挙動に注意が必要。

Trueにするとeditablae=False, blank=Trueになる

 

・auto_now_add=False

オブジェクト(レコード)が最初に作成されるときに自動で現在の日付をセットする。デフォルト設定はFalse。

レコードの新規作成時の日付をセットしたいときに使用する。レコードの更新時には日付は更新されない。

このフィールドを後から修正できるようにしたい場合は別途設定が必要。

Trueにするとeditablae=False, blank=Trueになる

 

このフィールドのデフォルト設定、auto_now、auto_now_addはどれか1つのみ適用できる。

 

 

TimeField

 

概要

時、分、秒、マイクロ秒の情報を持つフィールド。

datetime.timeインスタンスで表される。

 

オプション

 

 

DatetimeField

 

概要

年、月、日、時、分、秒、マイクロ秒までの情報(タイムスタンプ)を記録するフィールド。フォームウィジェットはDateTimeInputが使用される。

 

オプション

DateFieldと同じ引数を持つ。

 

 

DecimalField

 

概要

固定制度の小数を保持するフィールド

 

オプション

・max_digits

小数点以下の桁を桁数の最大値を指定できる。

111.11の場合はmax_digits=5になる。

 

・decial_places

小数点以下の位の数

3を指定すると小数点以下3桁まで指定できる

 

 

IntegerField

 

 

 

FloatField

 

GenericIPAddressField

 

DurationField

概要

時間の間隔や期間を保持するフィールド。

Pythonのtimedeltaを元にしている。

PostgreSQLではデータ型はinterval、Oracleではデータ型INTERVAL DAY(9) TO SECOND(6)。

 

 

 

EmailField

 

FileField

 

FilePathField

 

ImageField

 

JsonField

 

URLField

 

UUIDField

 

概要

UUID(Universally Unique Identifer)を保持するためのフィールド。

UUIDは重複の無いIDを使用するためのもの。

primary_key=Trueにして主キーとして使用することが望ましい。

オプション

 

使用例

primary_key=Trueにして主キーにする。

default=uuid.uuie4とすることで、新しいレコードが作成される際に自動でUUIDを作成する。デフォルト値

editable=Falseとすることで、このフィールドの編集を不可とする。

IDは一意(重複が無い)状態でなければならないので編集は不可としておく。

 

PositiveBigintergerField

 

PositiveIntegerField

 

PositiveSmallIntegerField

 

SlugField

 

SmallAutoField

 

 

Django記事一覧

 

【Django】モデルのフィールドオプション一覧

 

Django記事一覧

コメント