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 のいずれかのメンバーを myLocalClass1 として持つすべての myClass2s を返すようにしたいと考えています。さらに、事前に 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の組み合わせを使用するだけです。invalues_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 に答える