【django】Model Fieldの一覧

スポンサーリンク
Django

今日はDjangoのModel Fieldの一覧を紹介します。

多数あるModel Fieldですが、入れるデータの種類は決まってます。

数字、時間、文字列、画像などのデータの4つがメインになります。

この4つの中でも表示形式でさらに分けたものがEmailアドレス形式だったり、小数形式になります。
また、表示形式の中でも特殊なものもあります。

今日はこの数字、時間、文字列、データ、その他ごとに分け、中身に意訳も混じりつつ一覧を紹介していきます。

「数字」を入れるModel Field

整数

フィールド名説明属性
AutoField自動的に一つずつ増えるIntegerFieldです。
入力がなければ自動的にモデルに追加されます。
**option
IntegerField-2147483648から2147483647までの整数が入ります。
フォームウィジェットはNumberInputかTextInputです。
**option
BigIntegerField-9223372036854775808から92233720368547
75807までが入る。64bitの整数。
**option
SmallIntegerField-32768から32767までが入る16bitの整数。**option

AutoFieldはモデル内のオブジェクトに番号を割り振るためのフィールドです。

それ以外はIntegerFieldになりますが、BigやSmallも存在します。
これらの違いはフィールド内で扱える数字が違います。

「なら、一番多く使えるBigIntegerFieldでいいじゃん!」と思いますが、扱う数字が多くなると使用するストレージの量も多くなってきます。
扱う数字や保存するデータの量を考慮して決めましょう。

0と正の数

フィールド名説明属性
PositiveIntegerField0 ~ 2147483647のIntegerField (整数)です。**option
PositiveBigIntegerField0 ~ 9223372036854775807のInteger Fieldです。**option
PositiveSmallIntegerField0 ~ 32767 の IntegerFieldです。**option

上記にある整数の負の数がないフィールドです。
各フィールドの違いは、整数の部分と同じ内容になります。

小数

フィールド名説明属性
FloatFieldpythonのfloatインスタンスで表される浮動点小数です。
フォームウィジェットはNumberInputかTextInputです。
**option
DecimalFieldpythonのdecimalインスタンスで表される10進数の小数です。
フォームウィジェットはNumberInputかTextInputです。
max_digits
decimal_places
**option

FloatとDecimalの違いは、Floatが2進数で、Decimalが10進数を使用していることです。

例えば、Floatが2進数で0.05を示すと、0.05 = (0/2+0/4+0/8+0/16+1/32+1/64+0/128+0/256+1/512+…)となり、キリよく表示することができないため誤差が生じます。

Decimalは10進数で表現をします。また、引数にあるmax_digitsとdecimal_placesで小数の切り捨てを設定できるため、Floatとは異なり数字の精度を高めることができます。

「時間」をいれるModel Field

日時

フィールド名説明属性
DateFieldpythonのdatetime.dateインスタンスで表される日付です。
フォームウィジェットはDateInputです。
auto_now
auto_now_add
**option
DateTimeFieldpythonのdatetime.datetimeインスタンスで表される日付と時刻です。
フォームウィジェットはDateTimeInputです。
auto_now
auto_now_add
**option
TimeFieldpythonのdatetime.timeインスタンスで表される時刻です。
フォームウィジェットはTimeInputです。
auto_now
auto_now_add
**option

DateFieldでは日付のみ、DateTimeFieldは日付と時刻、TimeFieldは時刻のみのためのフィールドです。
ここでは特記するようなことはないです。

日時(期間)

フィールド名説明属性
DurationFieldpythonのtimedeltaでモデル化される時刻の期間を保持します。**option

「文字列」を入れるModel Field

文字

フィールド名説明属性
CharField一般的な文字列のフィールドです。
フォームウィジェットはtextinputです。
max_length
**option
TextField大量の文字列に対するフィールドです。
フォームウィジェットはtextareaです。
**option

CharFieldとTextFieldは文字列のフィールドという意味では同じですが、TextFieldは文字数が制限されてないため、CharFieldと比べて読み出しや保存の効率が悪いです。

文字数が分かっている場合はCharFieldを使用した方が効率の良い設計になります。

Emailアドレス

フィールド名説明属性(デフォルト)
EmailFieldEmailか確認するEmailValidatorで
値をチェックするCharFieldです。
max_length(=254)
**option

EmailFieldのmax_lengthはデフォルトとして254が設定されています。
254文字以上のEmailはないとは思いますが、注意すべき点です。

URL

フィールド名説明属性(デフォルト)
URLFieldURLValidatorで値をチェックするChar Fieldです。
フォームウィジェットでURLInputを使います。
max_length(=200)
**option
SlugFieldURLに使われるような文字(半角英字)、数字や
アンダースコア、ハイフンを含む短い文です。
max_length(=50)
**option

URLFieldのmax_lengthはデフォルトで200が設定されています。
SlugFieldのmax_lengthは50が設定されています。

SlugFieldはドメイン以降のURLの末端部分の保存に適しており、読み出し先としてはurls.pyなどに使用されることがあります。何がメリットかというと、保存したデータでページを作る時、SlugがあるとURLに保存したデータに適した文言を入れることができます。

ファイルパス

フィールド名説明属性(デフォルト)
FilePathFieldあるディレクトリ上のファイル名に限り選択肢とするCharFieldです。path(設定が必須)
match(=None)
recursive(=False)
allow_files(=True)
allow_folder(=False)
max_length(=100)
**option

FilePathFieldのpathは設定が必須なものになります。例:path = “/home/images”のようなものです。

matchは正規表現を使用して、ファイル名をフィルタリングします。
例:”foo.*\.txt” では”foo23.txt”はOKですが、”bar.txt”や”foo23.png”はNGになります。

recursiveはpathで指定した先のディレクトリのサブディレクトリも含むかを指定します。
allow_filesとallow_folderは指定先ディレクトリのファイルやフォルダーを含むかを指定します。allow_filesとallow_folderのどちらかは”True”にする必要があります。

IPアドレス

フィールド名説明属性(デフォルト)
GenericIPAddressFieldIPv4かIPv6のアドレス用で文字列のフォーマットです。
フォームウィジェットはtextinputです。
protocol(=both)
unpack_ipv4(=false)
**option

UUID

フィールド名説明属性
UUIDFieldpythonのUUIDクラスを使用し、UUIDを保持するフィールドです。
AutoFieldに代わるのに最適です。
**option

このUUIDFieldだけではUUIDを生成しないため、デフォルトの設定が必要です。
以下のようにデフォルトを書きましょう。

import uuid
from django.db import models

class MyUUIDModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    # other fields

「データ」が入るModel Field

フィールド名説明属性(デフォルト)
FileFieldファイルをアップデートするフィールドです。upload_to(=None)
max_length(=100)
**option
ImageFieldFileFieldのメゾットと属性を引き継いでます。
また、アップロードされたデータが有効な画像か確認します。
upload_to(=None)
height_field(=None)
width_field(=None)
max_length(=100)
**option

FileFieldのupload_toはアップロードディレクトリとファイル名を設定する方法を提供します。
アップロードディレクトリを設定する場合は、upload_to=’uploads/’
ファイル名を設定する場合は、upload_to=’uploads/%Y/%m/%d/’となります。

ImageFieldにはPillowライブラリが必須になります。
また、2つ追加の属性としてheight_fieldとwidth_fieldがあります。
これで設定した高さと幅に画像の大きさを自動的に変更します。

ちょっと特殊なModel Field

フィールド名説明属性(デフォルト)
BinaryFieldバイナリーデータを入れるフィールドです。max_length(=None)
**option
BooleanFieldTrue/Falseのフィールドです。
フォームウィジェットはCheckboxInputです。
**option
JSONFieldJSONのデータを格納します。
データは辞書やリスト、文字列、数値などで表されます。
encoder(=None)
decoder(=None)
**option

Model Fieldの **option

今までフィールドを書いてきました。
それらの中には属性部分に**optionと書いてあります。
その**optionには以下の項目が全て入っています。

オプション説明
**optionnullTrueの場合、空の値をNULLとして保存できます。
デフォルトはFalseです。
CharFieldやTextFieldで空の値を入れる場合はblankを推奨します。
blankTrueの場合、フィールドはブランクになることができます。
デフォルトはFalseです。
choicesリストやタプルで2つの要素を設定すると、選択肢として使用できます。
例:choices = [(1,’Alpha’),(2,’Beta’),…]
db_columnこのフィールドを使用するためのデータベースのカラムの名前です。
もし与えられなければ、Django はフィールド名を使用します。
db_indexTrueの場合、データベースインデックスがこのフィールドのために生成されます。
db_tablespaceフィールドが索引される場合、データベース領域の名前となります。
defaultフィールドのデフォルト値を設定します。
editableFalseの場合、管理画面やModelFormに表示されないです。
デフォルトはTrueです。
error_messages既存のエラーメッセージを無視して、表示するメッセージです。
help_textフォームウィジェットと共に表示される補助テキストです。値の中にHTMLを組み込むこともできます。
primary_keyTrueの場合、設定したフィールドを帰属モデルの主キーにします。
モデル内のフィールドにprimary_key=Trueとして設定しない場合は、自動的にprimary_keyをもつフィールドを加えます。
uniqueTrueの場合、そのフィールドはテーブル上で一意となる制約を受けます。
unique_for_dateDateFieldやDataTimeFieldにこれを設定すると、日付の値が一意になります。
unique_for_monthunique_for_dateと同様ですが、月に対して一意になります。
unique_for_yearunique_for_dateやunique_for_monthと同様で、年に関して一意になります。
verbose_name人間が可読なフィールド名を設定します。
validatorsこのフィールドに対して使用できるバリデータのリストです。

最後に

私自身が学び始めた頃、model fieldはわかりにくいと思っていたため、初心者向けになるべく分かりやすく、細かく書いてみました。

以上がModelのFieldの一覧でした。お付き合いいただきありがとうございます。

djangoをより学びたい場合の関連記事です。
djangoをレベル別で書籍を使用し、順序よく学びたい方におすすめの本を紹介している記事です。

djangoを初めて学ぶ初学の方から、基礎を学び終えた初級の方、アプリを作った・作っている中級の方の3種のレベルに分けておすすめの本を紹介しています。

また、動画で学びたい方はこちらの記事をおすすめします。
djangoをこれから学ぶ方から、アプリ開発したいけどやり方がわからない!って方におすすめです。
Udemyでおすすめな厳選django動画教材を紹介します。

タイトルとURLをコピーしました