фильтровать теги django-taggit в Queryset Django
Имея следующие модели:
class Post(models.Model):
title = models.CharField(max_length=250)
tags = TaggableManager()
и данные:
**post.title** **post.tags**
Django By Example python,django,web
Who was Django Reinhardt python,django,
Test-Driven Development with Python python,web
Python for Data Analysis python,data
Learning Python python
Programming Python python
Automate the Boring Stuff with Python python
Я пытаюсь код ниже
>>> alist=Post.objects.filter(tags__name__in=["data","python"])
>>> for i in alist.annotate(sam_tags=Count('tags')):
... print("\n---",i)
... print("tags of it : ",i.tags.all())
... print("value of sam_tags : ",i.sam_tags)
...
--- Django By Example
tags of it : [<Tag: django>, <Tag: python>, <Tag: web>]
value of sam_tags : 1
--- Who was Django Reinhardt
tags of it : [<Tag: django>, <Tag: python>]
value of sam_tags : 1
--- Automate the Boring Stuff with Python
tags of it : [<Tag: python>]
value of sam_tags : 1
--- Test-Driven Development with Python
tags of it : [<Tag: python>, <Tag: web>]
value of sam_tags : 1
--- Learning Python
tags of it : [<Tag: python>]
value of sam_tags : 1
--- Python for Data Analysis
tags of it : [<Tag: data>, <Tag: python>]
value of sam_tags : 2
--- Programming Python
tags of it : [<Tag: python>]
value of sam_tags : 1
>>>
почему значение slist [0] .sam_tags (post: Django By Example) равно 1?
Я думаю, что объект post (post: Django By Example) имеет три тега [python, django и web] после прочтения документации Django.
https://docs.djangoproject.com/en/1.10/ref/models/querysets/#count
Он сказал, чтоГраф (выражение) возвращает количество объектов, связанных с помощью предоставленного выражения. так что код
>>>alist[0].tags.all()
[<Tag: django>, <Tag: python>, <Tag: web>]
показывает, что в alist [0] .tags есть три тега,
>>> slist=alist.annotate(sam_tags=Count('tags'))
>>> slist[0].tags.all()
[<Tag: django>, <Tag: python>, <Tag: web>]
>>> slist[0].sam_tags
1
но здесь я получаю значение 1,
Зачем?
Я понимаю, что Django считает только теги "python" и "data", которые я включил в свое предложение фильтра - другие теги не учитываются.
Вывод «slist [0] .tags.all ()» показывает, что slist [0] имеет три тега, связанных с самим собой. Поскольку в документации django говорится, что Count (выражение) возвращает количество объектов, связанных с помощью предоставленного выражения, slist [0] .sam_tags должен быть равен 3 в соответствии с документацией, но django-taggit делает slist [0] .sam_tags для быть 1.
Так что я действительно хочу знать, как django-taggit позволяет Count (выражение) в предложении фильтра только вычислять количество тегов в условии фильтра.