使用Django-Taggit过滤:是否可以过滤包含所有标签的模型条目?

时间:2017-07-08 16:14:50

标签: django django-models django-taggit

代码:

Food.objects.filter(tags__name__in=["Tag 1","Tag 2","Tag 3"]).distinct()

更确切地说,如果我想过滤食物中至少有三个标签的食物(不仅仅是三个中的一个或两个,但可能有三个以上),是否有修改在文档中提供的过滤器,以实现此结果?

http://django-taggit.readthedocs.io/en/latest/api.html

1 个答案:

答案 0 :(得分:0)

尝试:

tag_list = ["Tag 1","Tag 2","Tag 3"]

一种方法是以链式方式使用多个过滤器。喜欢这个

Food.objects.filter(tags__name=tag_list[0]).filter(tags__name=tag_list[1]).filter(tags__name=tag_list[3]).distinct()

另一种方法是使用annotation approach

Food.objects.filter(tags__name__in=tag_list).annotate(num_tags=Count('tags')).filter(num_tags__gte=len(tag_list)).distinct()