首先,对不起我的英语不好,这个问题解释起来并不简单,所以我希望你能理解我。
我有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]
使用[2, 5, 6]
给定的列表,我应该检索记录 2 和 3,而不是 1。
我成功地检索到与此查询的 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。
谢谢你的帮助。如果不够清楚,请随时向我提问。;)
编辑:
还有一件事:也有可能my_list
包含比必要更多的 ID。例如,[2, 5, 6, 7]
我应该检索记录 2 和 3。