python - 在 django 模型中实现这些关系的正确做法
问题描述
我正在设计我的数据库,并且想知道我正在实施的关系是否是最佳实践。
目的是一个人可以拥有多个地方,多个人甚至可以在不同时间预订一个地方。一个地方可以有多个预订。
所以我正在使用这段代码:
class User(models.Model):
name = models.CharField(max_length=100)
ban = models.BooleanField(default=False)
class Place(models.Model):
name = models.CharField(max_length=50)
owner = models.ForeignKey(User, on_delete=models.CASCADE, )
class Bookings(models.Model):
date = models.CharField(max_length=100)
booker = models.ForeignKey(User, on_delete=models.CASCADE)
place = models.ForeignKey(Place, on_delete=models.CASCADE)
预期输出是实现关系的安全方式。目前,当我在 shell 中测试它们时,它们正在工作,有一两个地方/用户,但我不确定这是否是最好的方法。
解决方案
您的关系是正确的,但当前Booking
模型允许同时对同一个地方进行多次预订。您至少需要对(place, date)
. 同样正如 olinox 提到的,你肯定想要一个DateField
(或DatetimeField
)Booking.date
:
class Booking(models.Model):
date = models.DateField()
booker = models.ForeignKey(User, on_delete=models.CASCADE)
place = models.ForeignKey(Place, on_delete=models.CASCADE)
class Meta:
unique_together = [("date", "place")]
此外,使用 contrib.authUser
模型或兼容的AbstractUser
- 安全身份验证并不是那么简单,因此最好使用经过测试、证明、维护的代码。
推荐阅读
- python - Pytorch 在第一个 Epoch 的训练阶段后发生错误
- windows - 如何让 Oracle SQL Developer 显示应用程序图标?
- javascript - Discord“messageCreate”和“InteractionCreate”事件不起作用
- angular - 开发 Windows-Admin-Center 扩展(Angular、Typescript、Powershell)时出现问题
- node.js - Electron“网络服务崩溃,正在重新启动服务。”
- python - 如何重置迷宫
- python - 为什么我不能使用 Pygrib 打开我的 girb2 文件?
- javascript - SocketIO 延迟 20 秒
- c - 从源代码编译 Kamailio 模块会导致错误
- python - Pyspark/Databricks for loop 无缘无故地运行两次 - 为什么?