Django ではモデルをとおして、データベースを構築します。

モデル

モデルを使用することで、SQL を意識することなくデータベースを操作することができます。

モデルを定義するには models.py に追加します。

クラスを追加し、各プロパティを定義していきます。

ForeignKey、CharField、TextField、DateTimeField などのフィールド解説は公式ドキュメントを参考にして下さい。

公式ドキュメント

フィールドクラス

フィールドクラス 説明
ForeignKey 多対 1 の関係で他のモデルへのリンク
CharField 文字列のフィールド
TextField 多量のテキストのフィールド
DateTimeField 日付と時刻のフィールド
IntegerField 整数のフィールド
FloatField 小数のフィールド

フィールドオプション

フィールドクラスで使えるオプションです。

フィールドオプション 説明
null データベースの NULL 可否を設定
blank フォームフィールドのブランク可否を設定
choices フォームの選択枠を設定
default デフォルト値を設定
unique ユニーク制約を設定
verbose_name フィールド名を設定
validators バリデーションの設定

リレーションフィールドクラス

リレーションフィールドクラスを使用すると、モデルクラス間で関連付けをすることができます。

リレーションフィールドクラス 説明
OneToOneField 1 対 1
ForeignKey 1 対 多
ManyToManyField 多 対 多

on_delete オプション

on_delete オプション 説明
models.CASCADE 一緒に削除される
models.PROTECT 削除できない
models.SET_NULL NULL がセットされる
models.SET_DEFAULT デフォルト値がセットされる
models.SET 任意の値がセットされる
DO_NOTHING 何もしない

models

投稿機能のモデルを作成していきます。

Post モデルを追加します。

app/models.py

from django.conf import settings
from django.db import models
from django.utils import timezone


class Post(models.Model):
	author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
	title = models.CharField("タイトル", max_length=200)
	content = models.TextField("本文")
	created = models.DateTimeField("作成日", default=timezone.now)

	def __str__(self):
		return self.title

コード解説

authorは、ForeignKey を使用して、ログインしているユーザーに紐づけます。

author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

titleは、CharField を使用して、テキストボックスを入力項目にします。

CharField は max_length を指定する必須があります。

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

contentは、TextField を使用して、テキストエリアを入力項目にします。

content = models.TextField("本文")

日付は、DateTimeField を使用します。

created = models.DateTimeField("作成日", default=timezone.now)

def __str__(self)で、管理画面などで表示される文字列の定義をすることができます。

def __str__(self):
	return self.title