У меня есть приложение django, где я итеративно делаю фильтры в цикле. Вот упрощенный пример: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)
Как вы можете видеть, условия операции AND. Есть ли более эффективный способ сделать этот запрос?
Вот другой подход, но это не дает мне никакого результата:
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'). Это то, что вы действительно (правильно, я думаю) понимаете в вашем другом подходе. Вероятно, вопрос заключается в следующем: чего вы пытаетесь достичь, объединяя два эксклюзивных условия? – Evert
См. Также http://stackoverflow.com/questions/8164675/chaining-multiple-filter-in-django-is-this-a-bug. Цепочки фильтров действительно OR-ed вместе, поэтому, чтобы получить то же поведение во втором подходе, замените & на |. Если это действительно то, что вы хотите. – Evert