【发布时间】: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)
我的问题是我想要用户的回复,基本上是 -> 酒店用户可以说 XYZ 是 Staff 的 XYZ 酒店。
我在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