- Djangoのモデルのフィールドタイプについて
- モデルのフィールドタイプ一覧
- AutoField
- BigAutoField
- BigIntegerField
- BinaryField
- BooleanField
- CharField
- TextField
- DateField
- TimeField
- DatetimeField
- DecimalField
- IntegerField
- FloatField
- GenericIPAddressField
- DurationField
- EmailField
- FileField
- FilePathField
- ImageField
- JsonField
- URLField
- UUIDField
- PositiveBigintergerField
- PositiveIntegerField
- PositiveSmallIntegerField
- SlugField
- SmallAutoField
- Django記事一覧
Djangoのモデルのフィールドタイプについて
Djangoはmodels.pyでモデルを作成することでデータベースのテーブルに対応するものを作成することができる。
この記事では、モデルフィールドタイプについてまとめる。
以下の記事は各モデルフィールドタイプが持つオプションについてまとめている。
モデルのフィールドタイプ一覧
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)。
例
1 2 3 4 5 6 |
from django.db import models from datetime import timedelta class TestModel(models.Model): duration1 = models.DurationField(default=timedelta(days=7)) duration2 = models.DurationField(default=timedelta(hours=10)) |
EmailField
FileField
FilePathField
ImageField
JsonField
URLField
UUIDField
概要
UUID(Universally Unique Identifer)を保持するためのフィールド。
UUIDは重複の無いIDを使用するためのもの。
primary_key=Trueにして主キーとして使用することが望ましい。
オプション
使用例
1 2 3 4 5 |
import uuid from django.db import models class UUID(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editabalse=False) |
primary_key=Trueにして主キーにする。
default=uuid.uuie4とすることで、新しいレコードが作成される際に自動でUUIDを作成する。デフォルト値
editable=Falseとすることで、このフィールドの編集を不可とする。
IDは一意(重複が無い)状態でなければならないので編集は不可としておく。
PositiveBigintergerField
PositiveIntegerField
PositiveSmallIntegerField
SlugField
SmallAutoField
Django記事一覧
コメント