Django 查询如何将字段与 _set 过滤条件进行比较?

时间:2021-06-28 09:20:51

标签: python django django-models django-queryset

我有以下型号

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)

我的预订模型有房间作为外键

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)

我的问题是我希望用户的回复基本上是 ->hotel 用户可以说 XYZStaff 酒店的 XYZ

我在 clean 方法中尝试过:

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

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

1 个答案:

答案 0 :(得分:0)

你可以使用:

self.replied_by.reservation.room.hotel.staff_set.filter(user=self.replied_by).exists()
相关问题