良く使うDjangoのモデルフィールドを解説

BACK END

Hello World.

LiSMOtechの久津間です。

 

この記事ではDjangoで開発を進める時に良く使うモデルフィールドについて解説していきます。

フィールドの型、意味、使い方などの理解を深め、フィールド定義を行う際の辞書代わりや、Djangoを使用したWebアプリケーション開発に活かしていただけると幸いです。

 

 

フィールドタイプとフィールドオプションの定義

Djangoでテーブル定義を行う際はmodels.pyに定義を行なっていきます。

フィールド定義を行う際は、以下のようにフィールドタイプフィールドオプションを記載します。

フィールド名 = models.フィールドタイプ(フィールドオプション,フィールドオプション)

 

以下の例ではCompanyモデルを定義する例となります。

class Company(models.Model):
    name = models.CharField('会社名', max_length=40)
    created_at = models.DateTimeField('作成日', auto_now_add=True)
    update_at = models.DateTimeField('更新日', auto_now=True)

文字列を扱うフィールド

文字列を扱うフィールドについて解説していきます。

 

CharField

CharFiledは小 – 大サイズの文字列を保存するためのフィールドです。

max_length(最大文字数)の文字数制限を表すフィールドオプションが必須となります。

 

(参考例)

name = models.CharField('会社名', max_length=40)

 

TextField

TextFiledは多量の文字列を保存するためのフィールドです。

保存するテキストサイズが多いのに適しているため、ブログや自己紹介などに適しています。

 

(参考例)

 history = models.TextField('沿革')

 

EmailFiled

EmailFiledは値が有効な電子メールアドレスであることを確認してくれるCharFiledです。

メールアドレスを利用する場合はこちらを使用します。

また、EmailValidatorを使ってインプットを検証してくれます。

 

(参考例)

email = models.EmailField('メールアドレス', max_length=254)

 

URLField

URLを保存するためのフィールドです。

URLValidator によって検証される、URL の CharFieldになります。

 

(参考例)

link = models.URLField('リンク', max_length=200)

 

SlugField

SlugFiledは、文字列がアルファベット、数字、アンダーバー、ハイフンを組み合わせた文字列を保存できるフィールドです。

よくあるのがブログエントリのURLなどになります。

 

(参考例)

slug = models.SlugField('スラグ') 

 

 

数値を扱うフィールド

数値を扱うフィールドについて解説していきます。

 

IntegerField

IntegerFieldは、整数値の最小値-2147483648から最大値2147483647までの値をサポートしています。

 

(参考例)

employee_num = models.IntegerField('従業員数', default=0)

 

FloatField

FloatFieldは、浮動小数点数を扱うことができるフィールドです。

 

(参考例)

age_ave = models.FloatField('平均年齢', default=0)

 

AutoField

AutoFieldは、利用可能なIDに応じて、自動的にインクリメントするIntegerFieldです。

通常は直接使う必要はなく、指定しない場合は、主キーのフィールドが自動的にモデルに追加されます。

 

 

論理値を扱うフィールド

論理値を扱うフィールドについて解説していきます。

 

BooleanField

TrueまたはFalseの真偽値を扱うフィールドです。

主にチェックボックスなどで使われています。

 

(参考例)

is_new = BooleanField('初回確認')

 

時刻を扱うフィールド

二値を扱うフィールドについて解説していきます。

 

DateField

DateFieldは、日付データを保存するためのフィールドです。

Pythonでdatetime.dateインスタンスによって表される日付になります。

オプションauto_nowをTrueにすることで、オブジェクトが変更される度に自動的に現在の日付が保存され、オプションauto_now_addをTrueにすると、オブジェクトが最初に作成されたときに自動的に現在の日付が保存されます。

共にデフォルトはFalseです。

 

(参考例)

created_at = models.DateTimeField('作成日', auto_now_add=True)
update_at = models.DateTimeField('更新日', auto_now=True)

 

DateTimeField

DateTimeFieldは、日付及び時刻を保存するフィールドです。

Pythonでdatetime.datetimeインスタンスによって表される日付と時刻です。

 

(参考例)

event = models.DateTimeField('イベント日時')

 

TimeField

TimeFieldは、時刻を保存するためのフィールドです。

Pythonでdatetime.timeインスタンスによって表される時刻になります。

 

(参考例)

event = models.TimeField('イベント時')

 

 

ファイルを扱うフィールド

ファイルを扱うフィールドについて解説します。

 

FileField

FileFieldは、ファイルアップロードのフィールドです。

 

(参考例)

attach = models.FileField('添付ファイル', upload_to='uploads/')

 

 

ImageField

ImageFieldは、画像をアップロードするためのフィールドです。

 

(参考例)

image = models.ImageField(upload_to='images/')

 

 

 

関係(リレーションシップ)を扱うフィールド

Djangoのリレーションを表すフィールドについて解説します。

 

ForeignKey

ForeignKeyは、別のモデルと一対多の関係を作ることができるフィールドです。

 

(参考例)

partner = models.ForeignKey(Partner, on_delete=models.CASCADE)

 

OneToOneField

OneToOneFiledはモデル同士を一対一の関係を作ることができるフィールドです。

 

(参考例)

partner = models.OneToOneField(Partner, on_delete=models.CASCADE)

 

 

 ManyToManyField

ManyToManyFieldは、他モデルと多対多の関係を作ることができるフィールドです。

 

(参考例)

partner = models.ManyToManyField(Partner)

 

その他フィールド

その他に役立つフィールドについて解説します。

 

UUIDField

UUIDFieldは、UUID (Universally Unique Identifier) を保持するためのフィールドです。

Python’s UUID クラスを使います。 PostgreSQL 上で使われるとき、uuid データ型の中に保持し、それ以外は char(32) の中に保持します。

 

(参考例)

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

 

まとめ

今回の記事ではDjangoにおける良く使うフィールドについて、解説を行いました。

参考例をつけているので、チートシートのような使い方もできるのではないかと思います。

また、フィールドオプションについても記載していきたいと思っているので、こちらの記事をアップデートするか、別の記事でご案内できればと思っています。


ともに考え、寄り添う。プロのデザインチームが即参戦。

販促ツールや一貫したデザインによるブランド構築などビジネスの成長をデザインの力で促進します。

NEXTGATE LiSMOtechでは中小企業を中心にブランディング・WEBマーケティングを活用したWEB戦略を提供しています。

企業課題・問題に関するご相談、WEBサイト制作やグラフィックデザイン制作のクリエイティブに関するご相談やご質問、お見積りなどお気軽にお問い合わせください。

お得な情報がLINEに届く!!

LINE公式アカウントはこちらから。

友だち追加

最新記事

CONTACT

NEXTGATE LiSMOtechでは中小企業を中心にブランディング・WEBマーケティングを活用したWEB戦略を提供しています。
企業課題・問題に関するご相談、WEBサイト制作やグラフィックデザイン制作のクリエイティブに関するご相談やご質問、お見積りなどお気軽にお問い合わせください。

平日10:00〜19:00

お電話の場合こちらから

043-305-4162

平日10:00〜19:00