サイトアイコン ITC Media

【完全版】Django ModelField一覧と使い方|実例付

(最終更新月:2022年2月)

✔このような方へ向けて書かれた記事となります

「DjangoのModelFieldって何?仕組み、構成を知りたい。」

「ModelFieldにはどんなものがあるも?」

「それぞれの使い方が具体的にわかるといいんだけど、、」

✔当記事を通じてお伝えすること

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Django model fieldとは?

model fieldって何?役割は?

Djangoのモデルフィールドは、データベーステーブルのカラムに相当します。

つまり、Djangoのモデルフィールドを使いこなすことで、SQL言語を書かずにPythonでデータベースへの書き込みができるというメリットがあります。

また、データベースの種類を問わず、Pythonで記述をするだけで各データベースに対応してくれるのも更なるメリットの一つと言えます。

model fieldの構成

モデルフィールドを記述するのは、models.pyファイル内のmodels.Modelを継承したクラス内で下記の通り記述します。

フィールド名 = models.フィールドの型(フィールドオプション)

具体例は最後にお見せしますが、一例をご覧頂くとこのようになります。

from django import models

class SampleModelClass(models.Model):
    title = models.CharField(max_length=100, default="sample default") #ここがモデルフィールド

今はわからなくても構いません。

順を追ってご説明していきます。

Django model fieldの一覧【2022年】

モデルフィールドを理解していくにあたり、①オプション②フィールドの型をご理解いただく必要があります。

まずはオプションから説明していきます。

models.フィールドの型(フィールドオプション)と、( )内に記述をするのがオプションです。

フィールドオプション一覧

オプション名デフォルト説明
nullTrue/FalseFalseデータベース内に空「NULL」として値が保存されます。
blankTrue/FalseFalseデータベース内の値がブランクとして保存することが許容されます。
choices(データ、表示)/最初の値がデータベースへ保存され、2つ目の値がブラウザで表示されます。
db_columnカラム名テーブル名データベースのカラム名を指定します。
db_indexTrue/False/Trueの場合、データベースインデックスが、このフィールドの為に生成されます。
db_tablespaceデータベーステーブルスペースDEFAULT_INDEX_
TABLESPACE
フィールドにインデックスが付けられている場合に、フィールドのインデックスに使用するデータベーステーブルスペースの名前を指定します。
default任意の値/フィールドのデフォルト値を指定します。
editableTrue/FalseTrueFalseの場合は、管理ページやモデルフォームなどに表示されません。編集ができないフィールドとなります。
error_messages任意の文字列右記参照null、blank、invalid、invalid_choice、unique、unique_for_dateのキーを使って、値を指定することで、デフォルトのエラー時のメッセージを書き換えることができます。
help_text任意の文字列/フォームウィジットと共に表示される補助テキストになります。
primary_keyTrue/FalseFalseTrueに設定すると、モデルクラスのプライマリーキーと認識されます。
unique任意の値FalseTrueに設定した場合、同じ値での入力ができないようになります。ユーザー名などで使用すると効果があります。
unique_for_dateDateTime型FalseDateFieldやDateTimeFieldで設定可能です。Trueの場合は同じ日付での保存ができなくなります。
unique_for_monthDateTime型False同じ月での保存ができません。
unique_for_yearDateTime型False同じ年での保存ができません。
verbose_nameString型フィールド名に
同じ
フォームのラベルや管理画面での表示用のフィールド名になります。
validators//フィールドに独自の制限を付けることができます。

以上がオプションです。

それぞれの型特有の引数もあります。フィールドの型一覧で確認していきましょう。

フィールドの型

2022年2月現在で公式サイトより抜粋し、情報は多少絞っていますが、英語なども混じっている箇所も日本語にしていますので、わかりやすくまとまっています。

フィールド名 = models.フィールドの型(フィールドオプション)の「models.」に続いて記述される部分になります。

【int型データを保存するフィールド】

フィールド名説明必要な引数
AutoField自動で保存される数値のフィールドです。
一つずつ数値が上がっていくIDに使用されるフィールドです。
特になし
BigAutoField1から9223372036854775807まで可能なAutoFieldです。特になし
SmallAutoField1から32767まで保存可能なAutoFieldです。特になし
IntegerField整数で、-2147483648から2147483647が保存可能です。特になし
BigIntegerField-9223372036854775808から9223372036854775807まで保存可能なIntegerFieldです。特になし
SmallIntegerField-32768から32767まで保存可能なIntgerFieldです。特になし
PositiveIntegerField整数の中でも、0から2147483647までが保存できます。特になし
PositiveBigIntegerField整数の中でも、0から9223372036854775807までが保存できます。特になし
PositiveSmallIntegerField整数の中でも、32767までが保存できます。特になし

【Float型データを保存するフィールド】

フィールド名説明必要な引数
DecimalFieldPythonのDecimal(浮動小数点)の値が保存されます。max_digits
decimal_places
FloatFieldPythonのfloat型の値が保存されます。

【Datetime型データを保存するフィールド】

フィールド名説明必要な引数
DateField日付が保存されるフィールドです。auto_now
auto_now_add
DateTimeField日付時間が保存されるフィールドです。auto_now
auto_now_add
TimeField時間が保存されるフィールドです。特になし
DurationFieldtimedelta型保存されます。特になし

【Str型データを保存するフィールド】

フィールド名説明必要な引数
CharFieldテキストが保存されるフィールドです。max_length
TextFieldCharFieldの中でも、字数の多いテキストを保存するフィールドです。特になし
EmailFieldCharFieldでEmailのみ保存可能としたフィールドです。特になし
SlugFieldCharFieldでURLのスラッグなどに対応したフィールドです。特になし
FilePathFieldCharFieldでファイルパスのみ保存可能としたフィールドです。path
URLFieldCharFieldでURLのみ保存可能としたフィールドです。特になし

【ファイルデータを保存するフィールド】

フィールド名説明必要な引数
FileFieldファイルが保存されます。upload_to
ImageFieldイメージファイルが保存されます。height_field(optional)
width_field(optional)

【その他のデータを保存するフィールド】

フィールド名説明必要な引数
BooleanFieldTrueもしくはFalseが入るフィールドです。特になし
GenericIPAddressFieldIPアドレスが保存されます。特になし
BinaryFieldbytesなどを保存するフィールドです。max_length
JSONFieldJSONデータが保存されます。特になし
UUIDFieldPythonのUUID型を保存します。特になし

【リレーションシップフィールド】

フィールド名説明必要な引数
ForeignKey他のモデルクラスと連携します。to
on_delete
ManyToManyField複数のモデルクラスと連携します。to
OneToOneField他のモデルクラスと一対一の関係で連携します。to
on_delete

Django ModelFieldの使い方・実例

よく使われるコードを使ってみます。

当ブログで一から作り方をご説明している日報アプリを一例にご紹介します。

【CharField】

title = models.CharField(max_length=100, verbose_name="タイトル")

【TextField】

content = models.TextField(verbose_name="内容")

【BooleanField】

public = models.BooleanField(default=False, verbose_name="公開する")

【SlugField】

slug = models.SlugField(max_length=20, unique=True, default=slug_maker)

デフォルト値を関数で指定しています。詳しくはこちらからどうぞ→ 記事「モデルフィールドのデフォルト値を関数で設定する

【DateTimeField】

timestamp = models.DateTimeField(auto_now_add=True)

引数「auto_now_add」がTrueの場合、データ作成時の日時が自動で保存されます。

【ForeignKey】

user = models.ForeignKey(User, on_delete=models.CASCADE)

「User」モデルクラスを参照できるようします。

【OneToOneField】

user = models.OneToOneField(User, on_delete=models.CASCADE)

こちらでは、「User」モデルクラスと一対一で連携しています。

まとめ

当記事の内容をまとめていきます。

モデルフィールドとは、データベース上のカラムに相当します。

書き方としては、

フィールド名 = models.フィールドの型(フィールドオプション)

となります。

詳しいオプション、フィールドの型については、2022年2月現在は当記事の内容が全てです。

全て覚えるのは難しいので、必要な時に戻ってきて下さい。

また、より詳しくは公式サイトにも載っています。英語の記載などが多く少しわかりにくいところもあるかもしれませんが、当記事で全体を掴んだ上で進んでいただくことをオススメします。

公式サイト「モデルフィールドリファレンス

モバイルバージョンを終了