我在我的Django应用程序中使用postgresql后端。我正在为模型管理器构建一个查询集,其中我有一个包含多个Q对象的过滤器。我有一个元组列表,我希望其中一个Q对象是这样的:
WHERE (id, id2) IN (VALUES (1, 1), (2, 1) ...);
其中值是我的元组列表。 Django FIELD__in查找似乎只适用于一个字段。有没有办法在一个数据库查询中执行此操作,最好不使用原始sql。
编辑:使用Django 1.9,PostgreSQL 9.4
答案 0 :(得分:0)
您可以在reduce
operator.or_
上对Q
个对象应用import operator
from functools import reduce
from django.db.models import Q
q = reduce(operator.or_, (Q(id=i, id2=j) for i, j in [(1, 1), (2, 1),...]))
,该对象包含从您的元组列表中获取值的两个ID。
Q
列表中的所有元组将连续传递到reduce
对象,并使用or
由q = Q(id=1, id2=1) | Q(id=2, id2=1) | Q(...)
加入。
你真的有:
visible