首页 > 解决方案 > 表大师和细节与外国 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

标签: djangodjango-models

解决方案


您可以通过Reservation使用方法作为属性来访问用户。这是最简单的方法。

关于代码的一些注释:

  1. 始终为字段使用小写名称,并且不使用 camelNaming。
  2. 避免在模型名称上使用复数形式。
  3. 我会避免default=1在 ForeignKey 中使用。如果未设置关系,最好引发错误。(如果 User=1 被删除会怎样?)
  4. 非必要不要复制数据,可以使用属性访问相关字段。仅当预订与DetailReservation对象相关时,用户才可用;detail_reservation.user如果未设置预订,将返回 None。
  5. 我不明白您为什么reservationDetailReservation.

看一看

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

推荐阅读