短編カフェお気に入り機能開発編2 実装
こんにちは。前回で仕様がだいたい決まったので、今回はお気に入り機能を実際に作りたいと思います。
Modelについて
モデルはユーザーテーブル自身に含める場合と、外に出す場合が考えられます。今回は外でやる形式にします。必須機能ではないし使わない人もいるので。
モデルはUserのところに書きます。
class FavUser(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='user_fav')
fav_user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='fav_user')
created_date = models.DateTimeField(default=timezone.now)
class Meta:
constraints = [
models.UniqueConstraint(
fields=['user', 'fav_user'],
name='fav_user_unique'
),
]
modelはシンプルにIDとUserとお気に入り先と作成日です。同じ組み合わせができないようにしたいので、UniqueConstraintを設定します。
URLについて
path('fav/', views.FavMyList.as_view(), name='fav_my'),
path('fav/<uuid:pk>/delete/', views.FavDelete.as_view(), name='fav_delete'),
path('fav/my/', views.FavUpdateList.as_view(), name='fav_list'),
path('fav/<slug:slug>/userpage/add/', views.FavAddFromUserPage.as_view(), name='fav_user_add'),
URLは上記の通り。
とりあえずお気に入り一覧とお気に入り解除、お気に入りユーザーの更新リスト、お気に入り追加機能です。
ひとまずユーザーページからの登録だけにしておきます。それ以外の場所からのお気に入り登録は将来的には追加しますが、いまは特にしない感じで。
画面
お気に入り登録画面です。

お気に入り一覧です。

お気に入り限界に来た場合はメッセージが表示されるようにしておきます。

既にお気に入り登録されている場合は登録ボタンは出ないようにします。
お気に入りの更新一覧

お気に入りの更新欄を作って、それぞれ小説、日記を10件まで表示されるようにしました。
暫定ですが、とりあえずお気に入り機能はこれで完了です。
次はリクエスト箱を作りたいと思います。
良ければサポートお願いします。サポート費用はサーバー維持などの開発費に使わせていただきます。