Django多人查询或问题
我对以下数据有一个问题:Django多人查询或问题,django,django-models,django-orm,Django,Django Models,Django Orm,我对以下数据有一个问题: 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
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年销售价格在18000-20000美元范围内的所有汽车
(在我们的示例中是否应该不返回任何内容,是吗?)
这就是我提出的问题:
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查询,这样查询就会准确无误?首先,我不明白为什么要在这里使用多行关系。尽管一辆车可以有许多yearpricedata实例,但每个yearpricedata只与一辆车相关。因此,正确的关系是从YearPriceData到Car的外键 无论如何,您都应该阅读上的文档。如上所述,为了使这两个条件都应用于相同的实体,您需要在相同的过滤器调用中使用它们。这应该起作用:
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))
我可能理解错了…但你不想问一下吗?Ex:2014年售出,超过18000美元,低于20000美元?@mevius我们在这里处理的是范围(在数据本身和查询中,据我所知,我所做的查询是必要的,以确保查询范围在汽车范围内)谢谢,我会很快进行测试。至于ManyToMany rel:一般来说,你是绝对正确的,但这只是一个例子,在我的数据中,YearPriceData是静态的(它们的值有时会改变100行),并且每辆车都与这个表中的一些行相关。