【发布时间】:2016-02-04 15:47:58
【问题描述】:
我有一个 django 应用程序,我在其中迭代地循环执行过滤器。 这是一个简化的例子:
class Decision(models.Model):
recommendation = models.TextField()
class Condition(models.Model):
dec = models.ForeignKey(Decision, related_name='condition')
temperature = models.PositiveInteger()
pressure = models.PositiveInteger()
Decision.objects.filter(condition__temperature=22, condition__pressure=123 ).filter(condition__temperature=30, condition__pressure=144).values_list('id',flat=True)
如您所见,条件是“与”。 有没有更有效的方法来做这个查询?
这是另一种方法,但它没有给我任何结果:
Decision.objects.filter(Q(condition__temperature=22, condition__pressure=123 ) &\
Q(condition__temperature=30, condition__pressure=144)).values_list('id',flat=True)
【问题讨论】:
-
我有点惊讶第一个查询显然给了你结果;正如您所说,我认为过滤器链是AND-ed,因此第一个过滤器排除了第二个过滤器(因为
condition__temperature=22排除了condition_temperature=30)。这就是你确实(正确地,我认为)在你的其他方法中得到的。问题可能是:结合两个独占条件,您要达到什么目的? -
另见stackoverflow.com/questions/8164675/…。过滤器链确实是 OR-ed 在一起的,因此要在第二种方法中获得相同的行为,请将 & 替换为 |。如果这确实是你想要的。
标签: django