Logo
Section 1 / 3

设置外键

学习并练习外键设置,以在模型之间建立关系。

导入

设置外键

学习并练习外键设置,以在模型之间建立关系。

网站上的房源列表目前尚未与任何用户关联。由于用户不希望看到其他人的房源,因此我们将使用外键来追踪每条房源是由哪位用户创建的。

外键是一种在模型中建立关系的方式。在本例中,关系存在于房源和用户之间。每条房源都将归属于创建它的特定用户。

更新模型

更新后的模型(listings/models.py)如下所示:

No configuration found for ID: ea6545ea77e58d39b46bcdfa23d13c6f24116e6c6c5e5849f1025b2fa2028379

在第23行,Listings 模型通过外键与 User 模型关联。null=True 表示该字段允许为空值。on_delete=models.CASCADE 的含义是:当删除某个用户时,所有与该用户相关的房源也会被一同删除,就像级联效应一样。

更新视图

我们还做了一项额外修改,确保房源能正确分配给特定用户。打开 listings/views.py 查看这些更改。

表单与之前几乎完全相同,唯一的区别是将填写好的表单保存到实例变量中(第23行)。由于设置了 commit=False,此时数据库中的更改尚未提交,表单不会立即保存到数据库。

在第24行,request.user 会获取当前登录的用户。这个用户将被绑定到正在创建的房源上。获取创建房源的用户后,我们在第25行调用 instance.save() 来保存表单。此时,更改才会真正写入数据库。

测试功能

在修改模型后,请先执行迁移命令再启动服务器。

1python manage.py makemigrations 2python manage.py migrate 3python manage.py runserver

现在运行应用即可测试外键设置。

登录管理后台,尝试创建一条房源。使用以下凭证访问管理员面板:

  • 用户名: educative
  • 密码: edu123

注意,表单中多出了一个名为 用户 的字段,如下图所示:

...
添加房源表单中的用户字段

点击该字段时,只会显示已存在的用户。在此情况下,会出现 educative 用户。你可以从这里创建房源,并将其分配给 educative 用户。

如果你通过管理后台创建房源,会发现地址字段出现在表单中。必须在此输入地址,否则无法提交表单。不用担心,地址不会在网站上显示,因为我们选择不展示该字段。

你也可以前往网站前端自行创建房源。这有助于验证所做的更改是否生效。当你创建房源时,用户 字段会自动识别并绑定当前登录用户。建议创建几位用户,并为每位用户至少创建一条房源进行测试。

注册页面

更新我的列表页面和导航栏