Menu
CoddyTech

ノートには所有者がいる

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を実行します。

challenge icon

チャレンジ

中級
  • 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プレイグラウンド