0

假设我有以下 Django 模型:

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


class myClass2(models.Model):
    myLocalClass1 = models.ManyToManyField(myClass1)     

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

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

现在,我想使用 Q 对象编写一个 Django 查询,以便它返回所有具有 myTargetList 的任何成员的 myClass2 作为 myLocalClass1。此外,我事先不知道 myTargetList 的确切大小。

我该怎么做?这显然行不通:

myClass2.objects.filter(Q(myLocalClass1__in=myTargetList))
4

2 回答 2

1

你可以这样做:

myclass1_qs = myClass1.objects.filter(myField__in=[1, 2, 3])
myclass2_qs = myClass2.objects.filter(myLocalClass1__in=myclass1_qs).distinct()

或者这是一个单行,

myclass2_qs = myClass2.objects.filter(myLocalClass1__myField__in=[1, 2, 3]).distinct() 
于 2013-06-06T16:48:13.510 回答
1

你几乎拥有它,你不需要Q对象,你可以使用inand的组合values_list

l = myClass1.objects.filter(myField__in=[1, 2, 3]).values_list("id", flat=True)
myClass2.objects.filter(myLocalClass1__pk__in=l) 
于 2013-06-06T16:12:22.063 回答