【Django】modelsのField一覧
はじめに
社内の有志メンバーの活動でDjangoを利用するので、modelsについて理解する必要があったので、
下記の公式ドキュメントを読み、本記事にまとめます。
Field(フィールド)一覧
Fieldの種類 | フィールドの説明 |
---|---|
BooleanField |
boolean値 (True/False) |
CharField |
文字列 |
TextField |
長い文字列(テキスト) |
SlugField |
文字列(アルファベット、数字、アンダーバー、ハイフンのみ) |
JSONField |
JSONエンコードされたデータ |
IntegerField |
整数 |
FloatField |
浮動小数点数 |
PositiveIntegerField |
0または正の整数 |
DateTimeField |
日付と時刻 |
DateField |
日付 |
TimeField |
時刻 |
EmailField |
メールアドレス |
URLField |
URL |
FileField |
ファイル |
ImageField |
画像ファイル |
GenericIPAddressField |
IPアドレス |
Field詳細
BooleanField
# 初期値をNoneにする場合
hoge = models.BooleanField()
# 初期値をTrueにする場合
hoge = models.BooleanField(default=True)
# 初期値をFalseにしたい場合
hoge = models.BooleanField(default=False)
CharField
# 最大文字数にしたい場合(最大文字数:255)
hoge = models.CharField(max_length=255)
TextField
hoge = models.TextField()
SlugField
# max_length が指定されていないとき、最大文字数は50になる
hoge = models.SlugField()
JSONField
JSONField
は、MariaDB, MySQL, Oracle, PostgreSQL, SQLiteのみにサポートされている
※SQLiteは、JSON1 extensionが有効状態のみ
# SON エンコードされた文字列を出力される
hoge = models.JSONField()
IntegerField
-2147483648
から2147483647
までの値は、Django でサポートされているすべてのデータベースで安全です。
from django.core.validators import MaxValueValidator, MinValueValidator
# 最大数を1000/最小数を1にする場合
hoge = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(1000)])
FloatField
localize
がFalse
のときNumberInput
で、そうでなければTextInput
となります。
from django.core.validators import MaxValueValidator, MinValueValidator
# 最大数を0.999/最小数を0.001にする場合
hoge = models.FloatField(validators=[MinValueValidator(0.00), MaxValueValidator(0.999)])
PositiveIntegerField
0
から2147483647
までの値は、Django でサポートされているすべてのデータベースで安全です。
from django.core.validators import MaxValueValidator, MinValueValidator
# 最大数を2147483647/最小数を1にする場合
hoge = models.PositiveIntegerField(validators=[MinValueValidator(1), MaxValueValidator(2147483647)])
DateTimeField
# 対象のオブジェクトが最初に作成されたときに自動的に現在の日付/時間が保存する
created_at = models.DateTimeField(auto_now_add=True)
# 対象のオブジェクトが変更される度に自動的に現在の日付/時間が保存する
updated_at = models.DateTimeField(auto_now=True)
※オプションauto_now
とauto_now_add
はデフォルトがFalseです。
DateField
# 対象のオブジェクトが最初に作成されたときに自動的に現在の日付が保存する
created_at = models.DateField(auto_now_add=True)
# 対象のオブジェクトが変更される度に自動的に現在の日付が保存する
updated_at = models.DateField(auto_now=True)
※オプションauto_now
とauto_now_add
はデフォルトがFalseです。
TimeField
# 対象のオブジェクトが最初に作成されたときに自動的に現在の時間が保存する
created_at = models.TimeField(auto_now_add=True)
# 対象のオブジェクトが変更される度に自動的に現在の時間が保存する
updated_at = models.TimeField(auto_now=True)
※オプションauto_now
とauto_now_add
はデフォルトがFalseです。
EmailField
hoge = models.EmailField()
URLField
hoge = models.URLField()
※最大文字数はデフォルトで200文字
FileField
# upload_to: MEDIA_ROOT配下の指定したファイルパスに保存される
# FileExtensionValidator: 登録できる拡張子を指定できる
hoge = models.FileField(upload_to='uploads/%Y/%m/%d/', validators=[FileExtensionValidator(['pdf'])])
ImageField
# upload_to: MEDIA_ROOT配下の指定したファイルパスに保存される
# FileExtensionValidator: 登録できる拡張子を指定できる
hoge = models.ImageField(upload_to='uploads/%Y/%m/%d/', validators=[FileExtensionValidator(['png'])])
GenericIPAddressField
hoge = models.GenericIPAddressField()
Pv4 か IPv6 のアドレスで、文字列フォーマットです (例: 192.0.2.30 ないし 2a02:42fe::4)。このフィールドのデフォルトのフォームウィジェットは TextInput です。
IPv6 アドレスは、 RFC 4291#section-2.2 section 2.2 (同セクションの paragraph 3 で提案された IPv4 のフォーマットの使用を含む) にしたがって、 ::ffff:192.0.2.0 のように正規化します。たとえば、 2001:0::0:01 は 2001::1 と正規化され、 ::ffff:0a0a:0a0a は ::ffff:10.10.10.10 と正規化されます。そして、すべての文字は小文字に変換されます。
Field options(フィールドオプション)一覧
Field optionsの種類 | フィールドの説明 |
---|---|
null |
nullの許容 |
blank |
blankの許容 |
choices |
任意の選択肢 |
default |
デフォルト値の設定 |
primary_key |
プライマリーキーの設定 |
unique |
一意制約の設定 |
verbose_name |
管理画面でのモデルの名前を指定 |
validators |
バリデータの設定 |
null
# DBにnullを保存できるようにする
hoge = models.BooleanField(null=True)
# DBにnullを保存出来ないようにする
hoge = models.BooleanField(null=False)
blank
# DBへの入力を必須にする
hoge = models.BooleanField(blank=True)
# DBに空でもOkにする
hoge = models.BooleanField(blank=False)
choices
# TシャツのサイズをSMLのいずれかにする
SHIRT_SIZES = [
("S", "Small"),
("M", "Medium"),
("L", "Large"),
]
shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)
default
# データの指定がない場合TrueがDBに保存される
hoge = models.BooleanField(default=True)
primary_key
primary_key=True
が設定されなかった場合、Django は自動的に主キーを保存するためにIntegerField
を追加
# idではなく、nameを主キーにしたい場合
name = models.CharField(max_length=100, primary_key=True)
unique
社員番号など重複が許されていないデータ
hoge = models.PositiveIntegerField(unique=True)
verbose_name
管理画面でtitle
ではなく、タイトル
と表示してくれる
title = models.CharField(max_length=, verbose_name='タイトル')
validators
from django.core.validators import MaxValueValidator, MinValueValidator
# 最大数を1000/最小数を1にする場合
hoge = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(1000)])
おわりに
今回公式ドキュメントを読み、「こんな事まで出来るのか!」と色々学びになりました。
やぱり、公式ドキュメントを読んで理解できるエンジニアは強いなと感じました。
Discussion