ノートには所有者がいる
CoddyのDjangoジャーニー「ユーザーとアカウント」セクションの一部。レッスン 8/16。
ログインしているすべてのユーザーが、ひとつのメモの山を共有しています。各メモを書いた人を区別するには、誰が書いたかを記録する必要があります。これは、本と著者を結び付けるときと同じように、ForeignKeyで記録します。
ユーザーにリンクするには、Userをインポートしないでください。ユーザーモデルを指定する設定settings.AUTH_USER_MODEL(その前にfrom django.conf import settings)をForeignKeyに指定します。ここでは"auth.User"です。そうすれば、独自のユーザーモデルを持つプロジェクトでも、このコードをそのまま使えます。
メモを書いた人は、決してフォームのフィールドにしません。ユーザーが選択できてしまうと、他人になりすまして書けてしまうからです。ビューで値を設定します。form.save(commit=False)は保存せずにオブジェクトを作成するため、ビューでフォームにないフィールドを設定できます。
order = form.save(commit=False)
order.total = order.quantity * order.unit_price
order.save()新しいフィールドのために、makemigrationsとmigrateを実行します。
チャレンジ
中級Noteには、ユーザーに関連付けるフィールドownerがあります。ユーザーを削除すると、そのユーザーのノートも削除され、user.notes.all()はユーザーのノートを一覧表示します。- 新しいノートは、サインインして作成したユーザーに属します。フォームに保存されるのは
titleとbodyだけです。
「Run」を押し、ada(パスワードはcoddy-pass-123)でログインして、ノートを作成し、「Data」タブを開きます。
自分で試してみよう
from django.db import models
class Note(models.Model):
title = models.CharField(max_length=100)
body = models.TextField(blank=True)
created = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["-created"]
def __str__(self):
return self.title
ユーザーとアカウントのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド