Django ManytoMany过滤精确列表

时间:2016-11-09 11:08:01

标签: django django-models

假设我有一个id列表:c = [' 1',' 2' ,' 3']

{{1}}

如何从c?

过滤具有id' s精确且仅具有类别的主题?

2 个答案:

答案 0 :(得分:6)

您需要为.filter(categories=category_id)列表中的每个元素调用c

c = [1, 2, 3]
topics = reduce(lambda qs, pk: qs.filter(categories=pk), c, Topic.objects.all())

然后,如果您要排除包含其他类别的主题(例如包含[1,2,3,4]的主题),那么您需要.annotate.filter总计数。

c = [1, 2, 3]
initial_qs = Topic.objects.annotate(cnt=models.Count('categories')).filter(cnt=len(c))
topics = reduce(lambda qs, pk: qs.filter(categories=pk), c, initial_qs)

答案 1 :(得分:0)

试试这个:

c = [1, 2 , 3]
result = Topic.objects.filter(categories__id__in=c)