假设我有以下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))
答案 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