【问题标题】:Django Query How to compare field with _set filter condition?Django Query如何将字段与_set过滤条件进行比较?
【发布时间】:2021-06-28 09:20:51
【问题描述】:

我有以下型号

class Reply(BaseModel):
    reply_to = models.OneToOneField(
        Review,
        on_delete=models.CASCADE,
        error_messages={'unique': 'Reply to this review already exists.'})
    replied_by = models.ForeignKey(HotelUser, on_delete=models.CASCADE)

Review 模型基本上是与带有保留的外键链接

class Review(BaseModel):
    reservation = models.ForeignKey(Reservation, on_delete=models.CASCADE)

并且我的预订模型有 Room 作为外键

class Reservation(BaseModel):
    room = models.ForeignKey(Room, on_delete=models.CASCADE)

并且房间在外键中与酒店链接

class Room(BaseModel):
    hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE)

我有某些员工模型,以这种方式将酒店作为外键

class Staff(BaseModel):
    hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE)
    user = models.OneToOneField(HotelUser, on_delete=models.CASCADE)

我的问题是我想要用户的回复,基本上是 -> 酒店用户可以说 XYZStaffXYZ 酒店。

我在clean 方法中试过这个:

def clean(self):
    if not self.replied_by.reservation.room.hotel.staff_set.filter(user=replied_by) == self.replied_by:
     raiseError

但限制没有任何变化,任何帮助都会有所帮助。

【问题讨论】:

  • filter() 将返回一个 QuerySet,因此您的 == 比较将不起作用(基本上您将对象列表与一个对象进行比较)。我认为在这种情况下,使用.exists() 就足够了,所以:self.replied_by.reservation.room.hotel.staff_set.filter(user=replied_by).exists()
  • 谢谢我也这样做了,你可以写下你的答案以供接受

标签: python django django-models django-queryset


【解决方案1】:

你可以使用:

self.replied_by.reservation.room.hotel.staff_set.filter(user=self.replied_by).exists()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    相关资源
    最近更新 更多