【发布时间】:2016-03-01 16:58:59
【问题描述】:
我已经简化了问题的模型,但基本上我正在尝试使用以下模型执行查询:
class mod1(models.Model):
mod1_id = CharField(unique=True, ...)
class mod2(models.Model):
field2 = models.ManyToManyField(mod1)
所以任何 mod2 对象都可以有 x 个 mod1s...在这种情况下,我有一个 mod2 对象,它附加了四个 mod1 对象,并带有“foo”、“bar”的 mod1_ids ”、“嘶嘶”和“砰”。如果我有两个不同的 mod1_id 列表,我可以制作列表的单独 Q 对象来执行过滤器,以便它返回我的 mod2 对象吗?我已经尝试过了,到目前为止它还没有产生任何结果。假设我不能将 id 列表组合成一个列表。我试过的:
from django.db.models import Q
Q1 = Q(field2__mod1_id__in=["foo"])
Q2 = Q(field2__mod1_id__in=["bar", "fizz"]
len(mod2.objects.filter(Q1 & Q2))
>>> 0
当我单独执行这些查询时,它们都可以工作,但它们不能一起工作。有人可以帮我吗?谢谢。
【问题讨论】:
-
这个问题在similar question 中得到了回答。最大的区别只是包含条件
Q(...__in=[...])而不是相等Q(...=...)。