每条笔记都有所有者
本课属于 Coddy Django 学习旅程的“用户和账户”单元。第 8 课,共 16 课。
每个已登录用户都共用同一堆笔记。为了区分笔记,每条笔记都要记录作者:使用 ForeignKey,就像书籍关联作者一样。
要关联用户,不要导入 User。将 ForeignKey 指向设置项 settings.AUTH_USER_MODEL(在 from django.conf import settings 之后),这个设置项指定了用户模型,此处是 "auth.User"。这样,代码在使用自定义用户模型的项目中也能正常运行。
作者不是表单字段:如果用户能选择作者,就可能冒充其他人来写笔记。由视图填入作者。和“表单”单元中的做法一样,form.save(commit=False) 会创建对象但不保存,因此视图可以设置表单中没有的字段:
order = form.save(commit=False)
order.total = order.quantity * order.unit_price
order.save()点击“运行”会为新字段执行 makemigrations 和 migrate。
挑战
中等为每条笔记指定所有者。
- 在
notes/models.py中,为Note添加一个owner字段:它是指向settings.AUTH_USER_MODEL的ForeignKey,并设置on_delete=models.CASCADE和related_name="notes"。从django.conf导入settings。 - 在
note_create(views.py)中,替换note = form.save()。创建笔记但不保存,将其所有者设为已登录用户,然后保存。
以 ada 的身份创建一条笔记,然后打开 Data 选项卡:它的所有者是 1。
亲手试试
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 在线编辑器