gpt4 book ai didi

django-models - 通过django中的多个外键关系过滤

转载 作者:行者123 更新时间:2023-12-05 06:50:45 25 4
gpt4 key购买 nike

我正在尝试通过多个外键关系解决问题,其中每个酒店都有很多房间,每个房间都有很多房价计划,每个房价计划都有很多价格。

如果你仔细想想,它就像圣诞树:

酒店
v
房间
v
费率计划
v
价格

我如何执行查询以在特定 price_date、特定 price_price 和特定 price_availability 返回特定 hotel_city 的酒店? (就像 Expedia 或 booking.com 查询一样)

例如:

Hotel.objects.filter(city='Beirut').filter(room__name=Room.objects.filter(rateplan__name=Rateplan.objects.filter(prices__availability=Prices.objects.filter(availability=1))))

我查看了 Django 复杂查询文档和注释/聚合,但无法全神贯注。

我的模型如下:

class Hotel(models.Model):
name = models.CharField(max_length=64)
city = models.CharField(max_length=64, default='Warsaw')

class Room(models.Model):
hotel_id = models.ForeignKey(Hotel, on_delete=models.CASCADE, related_name='room')
name = models.CharField(max_length=64, default='Double')

class Rateplan(models.Model):
room_id = models.ForeignKey(Room, on_delete=models.CASCADE, related_name='rateplan')
name = models.CharField(max_length=64, default='Standard')

class Prices(models.Model):
rateplan_id = models.ForeignKey(Rateplan, on_delete=models.CASCADE, related_name='prices')
date = models.DateField()
price_1 = models.DecimalField(null=False, max_digits=7, decimal_places=2)
price_2 = models.DecimalField(null=False, max_digits=7, decimal_places=2)
availability = models.SmallIntegerField()```

最佳答案

您可以使用__ 来过滤您需要的跨关系的值

documentation 中有很好的例子

Hotel.objects.filter(
city=your_city,
room__rateplan__prices__date=your_date,
room__rateplan__prices__price_1=your_price,
room__rateplan__prices__availability=your_availability,
).distinct()

关于django-models - 通过django中的多个外键关系过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66348442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com