django - 表大师和细节与外国 django 相同
问题描述
我正在尝试在 django 中创建两个模型,Reservation 和 DetailsReservation,我需要模型具有相同的 userReservation。例如,如果我创建一个 id:1 和 User:4 的 Reservation,当创建一个带有 Reservation 1 的详细信息时,应该复制用户userbyReserva
class Reservation(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
userReservation = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
class DetailsReservation(models.Model):
Reservation = models.ForeignKey(Reservation, blank=False, on_delete=models.CASCADE, null=True)
userbyReserva = #same user that do reservate
解决方案
您可以通过Reservation
使用方法作为属性来访问用户。这是最简单的方法。
关于代码的一些注释:
- 始终为字段使用小写名称,并且不使用 camelNaming。
- 避免在模型名称上使用复数形式。
- 我会避免
default=1
在 ForeignKey 中使用。如果未设置关系,最好引发错误。(如果 User=1 被删除会怎样?) - 非必要不要复制数据,可以使用属性访问相关字段。仅当预订与
DetailReservation
对象相关时,用户才可用;detail_reservation.user
如果未设置预订,将返回 None。 - 我不明白您为什么
reservation
从DetailReservation
.
看一看
class Reservation(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.ForeignKey(User, on_delete=models.CASCADE, )
class DetailReservation(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
reservation = models.ForeignKey(Reservation, blank=False, related_name='details',
on_delete=models.CASCADE, null=True)
@property
def user(self):
return reservation.user if reservation else return None
推荐阅读
- r - 使用条件和子类别过滤(分层)数据
- elasticsearch - 在 ruby fiter 下使用 Time.parse 时,Logstash 解析失败
- java - Kubernetes 外部连接到 Mongodb 集群
- javascript - 一个函数中有多个事件处理程序
- elixir - JSON 响应的单元测试,匹配 JSON 响应以断言键和值
- r - 在库函数中分配变量
- angular - Angular 6.x 元标记 OG:描述不适用于 FB
- unit-testing - Rails 升级后的神秘 rspec 错误
- javascript - 如何使用 JS 动态创建 SVG 文本元素
- python - 处理的 python 是固定在一个 CPU 上,还是可以使用多个 CPU 超时?