фильтровать теги 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 (выражение) в предложении фильтра только вычислять количество тегов в условии фильтра.

Ответы на вопрос(1)

Ваш ответ на вопрос