まず、私の英語が下手で申し訳ありません。この問題は説明するのが簡単ではないので、理解していただければ幸いです。
私は次のように2つのモデルを持っています:
class A(models.Model):
code = models.CharField(unique=True, max_length=10)
list_of_b = models.ManyToManyField('B')
class B(models.Model):
code = models.CharField(unique=True, max_length=10)
指定された B id のリストと正確に一致する A のインスタンスを取得することを目指しています。
たとえば、データベースに次の A のレコードがあるとします。
id: 1 - code: X - list_of_b: [1, 2, 4, 6]
id: 2 - code: Y - list_of_b: [2, 5, 6]
id: 3 - code: Z - list_of_b: [2, 3, 4, 5, 6]
与えられたリストでは、1では[2, 5, 6]
なく、2 と 3 のレコードを取得する必要があります。
次のクエリで、ID が完全に一致するレコードを取得することに成功しました。
queryset = A.objects.prefetch_related('list_of_b')
queryset = queryset.annotate(nb=Count('list_of_b')).filter(nb=len(my_list))
for id in my_list:
queryset = queryset.filter(list_of_b=id)
レコード 2 では機能しますが、レコード 3 では機能しません。
助けてくれてありがとう。十分に明確でない場合は、遠慮なく質問してください。;)
編集:
もう 1 つ:my_list
必要以上の ID が含まれている可能性もあります。たとえば、[2, 5, 6, 7]
レコード 2 と 3 を取得する必要があります。