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

2024-04-20 13:31:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Django应用程序中使用postgresql后端。我正在为modelmanager构建一个queryset,其中有一个带有多个Q对象的过滤器。我有一个元组列表,我希望其中一个Q对象是这样的:

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

其中值是我的元组列表。查找中的Django字段似乎只针对一个字段。有没有一种方法可以在一个数据库查询中实现这一点,最好不使用原始sql。你知道吗

编辑:使用django1.9、postgresql9.4


Tags: 对象django方法inid应用程序过滤器列表
1条回答
网友
1楼 · 发布于 2024-04-20 13:31:52

您可以将reduce应用于operator.or_上的Q对象,该对象包含从元组列表中获取值的两个id。你知道吗

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),...]))

列表中的所有元组依次传递给Q对象,并由reduce使用or连接。你知道吗

你真的有:

q = Q(id=1, id2=1) | Q(id=2, id2=1) | Q(...)

相关问题 更多 >