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行),并且每辆车都与这个表中的一些行相关。