【Django】SNSのDB設計・モデル定義をしてみよう!
SNSアプリケーションを構築するために、まずはデータベースの設計とモデルの定義を行います。この作業は、アプリのデータ構造を決定する重要なステップです。
目次
チュートリアルの全体像
第5章: SNSのDB設計・モデル定義をしよう(now🐾)
アプリ作成
まず、Djangoプロジェクト内で新しいアプリケーションを作成します。以下のコマンドを実行してください。
python manage.py startapp sns
このコマンドにより、sns
という名前のアプリケーションが作成されます。このアプリには、SNSに必要な機能を実装していきます。
テーブル設計
次に、データベースで使用するテーブルの設計を行います。以下のように、各テーブルに必要なカラムを定義します。
Post テーブル
- user: 投稿をしたユーザー(外部キー)
- image: 投稿に関連付けられた画像
- caption: 投稿のキャプション(説明文)
- created_at: 投稿が作成された日時
- updated_at: 投稿が更新された日時
Comment テーブル
- user: コメントをしたユーザー(外部キー)
- post: コメントが関連する投稿(外部キー)
- text: コメントの内容
- created_at: コメントが作成された日時
- updated_at: コメントが更新された日時
User テーブル
icon: ユーザーのアイコン画像
モデル定義
次に、上記のテーブル設計に基づいてDjangoのモデルを定義します。モデルは、データベースのテーブルをPythonのクラスとして表現したものです。
Post
sns/models.py
from django.contrib.auth import get_user_model
from django.db import models
User = get_user_model()
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
image = models.ImageField(upload_to="images", null=True, blank=True)
caption = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
user
: ForeignKey
を使ってUserモデルを参照します。
on_delete=models.CASCADE
は、関連するユーザーが削除された場合にそのユーザーが作成した投稿も一緒に削除されることを意味します。
image
: 投稿に関連する画像を保存するフィールドです。
caption
: 投稿の説明文を格納するフィールドです。
created_at
およびupdated_at
: それぞれ投稿が作成された日時と更新された日時を自動的に管理します。
Comment
同様に、コメントのモデルも定義します。
sns/models.py
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
text = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
user
とpost
はそれぞれ、誰がどの投稿にコメントしたかを示します。text
: コメントの内容を格納します。
User
accounts/models.py
class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(unique=True, max_length=255)
email = models.EmailField(unique=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
icon = models.ImageField(upload_to="icons", null=True, blank=True)
description = models.CharField(max_length=255, null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = UserManager()
USERNAME_FIELD = "email"
REQUIRED_FIELDS = ["username"]
ユーザーの基本情報や、アイコン、自己紹介文などを格納します。
Pillowインストール
画像を扱うために、Pillow
というライブラリをインストールします。これにより、画像のアップロードや処理が可能になります。以下のように、requirements.txt
に追加します。
docker/python/requirements.txt
Django==5.1
mysqlclient
django-tailwind[reload]
Pillow
次に、以下のコマンドを実行して、Dockerコンテナを再ビルドします。
docker compose up -d --build
マイグレーションファイル作成
モデルを定義したら、Djangoにデータベースの変更を認識させるために、マイグレーションファイルを作成します。
python manage.py makemigrations
このコマンドを実行すると、モデルの変更に基づいてマイグレーションファイルが自動生成されます。
マイグレーション実行
最後に、データベースに変更を適用します。以下のコマンドを実行します。
python manage.py migrate
このコマンドによって、データベースが最新の状態に更新され、SNSアプリで使用するためのテーブルが作成されます。
まとめ
以上の手順を通じて、Djangoを使用してSNSアプリのデータベース設計とモデル定義が完了しました。これで、アプリの機能を実装するための基盤が整いました。
この記事へのコメントはありません。