我对以下数据有疑问:
Class Car:
name = ...
year_price_data = ManyToMany(YearPriceData)
Class YearPriceData:
year = Integer
min_price = Integer
max_price Integer
所以你可以买这辆车:
Ford Focus:
---2014: 25,000$ - 40,000$
---2012: 7000$ - 23,000$
现在,我想查询所有符合特定年价格的汽车:
例如:所有2014年售出的汽车价格范围为18,000-20,000美元
(在我们的例子中不应该返回任何内容,是吗?)
所以这是我所做的查询:
Car.objects.filter(year_price_data__year=2014)
.filter(Q(year_price_data__min_price__lte=20000,year_price_data__min_price__gte=18000) | Q(year_price_data__max_price__lte = 20000,year_price_data__max_price__gte=18000))
由于OR它返回2012年的行,而它什么都不返回的问题!
所以我的问题是:如何为每个多行创建一个OR查询,这样查询就可以了?
答案 0 :(得分:2)
首先,我不明白为什么你想要一个ManyToMany关系。虽然汽车可以有许多年度实例,但每年的汽车数据只与一辆汽车有关。因此,正确的关系是从YearPriceData到Car的ForeignKey。
无论哪种方式,您都应该阅读spanning multi-valued relationships上的文档。正如那里所解释的,为了将两个条件都应用于相同的实体,您需要将它们放在同一个过滤器调用中。这应该有效:
Car.objects.filter(year_price_data__year=2014, Q(year_price_data__min_price__lte=20000,year_price_data__min_price__gte=18000) | Q(year_price_data__max_price__lte = 20000,year_price_data__max_price__gte=18000))