DjangoのModelのFieldについてここでは、その中でも特によく使う代表的なフィールドについて利用方法の詳細をまとめました。その他のフィールドについても後日まとめたいと思います。
AutoField, BigAutoField
フィールド名 | 概要 | DBでのデフォルトのカラム定義(sqlite) |
AutoField | 自動的に連番が振られるInterField。PrimaryKeyは指定するように定義する。 | Integer NOT NULL primary key AUTOINCREMENT |
BigAutoField | AutoFieldと同様の自動連番されるIntegerField。 64bitのintegerで1 - 9223372036854775807までの値が振られる。 PrimaryKeyは指定するように定義する。 |
Integer NOT NULL primary key AUTOINCREMENT |
また、primary_key=Trueとして定義しないと"Model %s can't have more than one AutoField"とエラーが出てしまうので、必ずprimary_key=Trueをつけましょう。
どちらも、多くはidなどのPKに利用されコード上は以下のように定義します。
id = models.AutoField(primary_key=True)
id = models.BigAutoField(primary_key=True)
BooleanField
フィールド名 | 概要 | DBでのデフォルトのカラム定義(sqlite) |
BooleanField | 真偽値のフィールド。 チェックボックスなどに利用される。 |
bool NOT NULL |
NOT NULLなのでdefaultを設定する必要があります(もしくは、null=Trueとするか)
defaultを設定をしないと、"You are trying to change the nullable field "と聞かれ、defaultの値を設定するかオプションを選ばされます。
is_deleted, activeなどフラグ系に使われます。
以下のように定義します。
active = models.BooleanField(default=True)
# 値がない場合はTrueが格納される
active = models.BooleanField(null=True)
# 値がない場合NULLが格納される
CharField
フィールド名 | 概要 | DBでのデフォルトのカラム定義(sqlite) |
CharField | 文字列のフィールド。大きい文字列はTextFieldに入れる。max_lengthを設定しなければいけない。 | varchar(max_length) |
max_lengthを設定をしない場合、"CharFields must define a 'max_length' attribute."とエラーが表示されます。
一般的な文字列のカラムに利用されます。
以下のように定義します。
title = models.CharField(max_length=256)
# max_lengthを定義する
TextField
フィールド名 | 概要 | DBでのデフォルトのカラム定義(sqlite) |
TextField | 大きな文字列の格納に利用されるフィールド。TextAreaで利用される。max_lengthを指定する必要はない | text |
以下のように定義します。
content = models.TextField()
DateField, DateTimeField
フィールド名 | 概要 | DBでのデフォルトのカラム定義(sqlite) |
DateField | Datetime.dateを保存する。以下のパラメータを設定できる。 FormのデフォルトのウィジェットはTextInputです。 adminページにはjavascriptのカレンダーと現在日付を自動で入れるボタンが表示される。 |
date not null |
DateTimeField | 日時を保存するフィールドです。pythonのdatetime.datetimeであらわされます。 FormのデフォルトのウィジェットはTextInput。adminページには2つのTextInputのウィジェットがある。 |
datetime not null |
引数には以下のパラメータが利用されます
autonow: オブジェクトが保存される(update)度に自動的に現在時刻に更新されます。このフィールドを設定した場合にはModel.save()実行時には自動更新されますが、Queryset.update()などで他のフィールドを更新した場合には自動更新されません。
auto_now_add: オブジェクトが挿入される(insert)度に、自動的に現在時刻で更新されます。
defaultの値は、
DateField: datetime.date.today()
DateTimeField: django.utils.timezone.now()
以下のように定義します。
update_date = models.DateField(auto_now=True)
inserted_date = models.DateField(auto_now=True)
updated_at = models.DateTimeField(auto_now=True)
inserted_at = models.DateTimeField(auto_now_add=True)します。
EmailField
フィールド名 | 概要 | DBでのデフォルトのカラム定義(sqlite) |
EmailField | 保存する値がEmailアドレスで利用できる形式かどうかチェックする機能(EmailValidator)を持ったCharField | varchar |
作成にはmax_lengthを設定しなければなりません。
以下のように定義します。
email = models.EmailField(max_length=240)
IntegerField
フィールド名 | 概要 | DBでのデフォルトのカラム定義(sqlite) |
IntegerField | -2147483648 to 2147483647の値の整数のフィールド。 Form上のウィジェットはlocalizeをFalseにしている場合にはNumberInput,それ以外はTextInput |
Integer NOT NULL |
以下のように定義します。
age = models.IntegerField(default=0)