如何使用Q对象检查任意长度列表中的任何成员是否处于多对多关系中

时间:2013-06-06 03:55:45

标签: django django-models django-q

假设我有以下Django模型:

class myObj1(models.Model):
    myField1 = models.IntegerField()     


class myObj2(models.Model):
    myLocalObj1 = models.ManyToManyField(myObj1)     

此外,假设我有一个独特的myObj1列表:

a = myObj1(myField=1)
b = myObj1(myField=2)
c = myObj1(myField=3)
myTargetList = [a, b, c]

现在,我想使用Q对象编写Django查询,以便它将myTargetList的任何成员的所有myObj2都返回为myLocalObj1。此外,我事先并不知道myTargetList的确切大小。

我该怎么办?这显然不起作用:

myObj2.objects.filter(Q(myLocalObj1__in=myTargetList))

1 个答案:

答案 0 :(得分:1)

编辑:为了使这更符合您的要求(尽管我不一定建议以这种方式做事),您可以:

vallist=[]
for b in myTargetList:
    vallist.append(b.myField)

myObj2.objects.filter(myLocalObj1__in=myObj1.objects.filter(myField__in=vallist))

这可以在Django文档中找到: https://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships