我可以使用多个字段查询WHERE IN而无需使用额外的原始sql吗?

时间:2016-06-10 13:55:10

标签: python django postgresql django-queryset django-orm

我在我的Django应用程序中使用postgresql后端。我正在为模型管理器构建一个查询集,其中我有一个包含多个Q对象的过滤器。我有一个元组列表,我希望其中一个Q对象是这样的:

WHERE (id, id2) IN (VALUES (1, 1), (2, 1) ...);

其中值是我的元组列表。 Django FIELD__in查找似乎只适用于一个字段。有没有办法在一个数据库查询中执行此操作,最好不使用原始sql。

编辑:使用Django 1.9,PostgreSQL 9.4

1 个答案:

答案 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对象,并使用orq = Q(id=1, id2=1) | Q(id=2, id2=1) | Q(...) 加入。

你真的有:

visible