filtrar tags do django-taggit no Queryset do Django

Tendo os seguintes modelos:

class Post(models.Model):
    title = models.CharField(max_length=250)
    tags = TaggableManager()

e os dados são:

**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

Eu tento codificar abaixo

>>> 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
>>> 

por que o valor de slist [0] .sam_tags (post: Django por exemplo) é igual a 1?

Eu acho que o objeto post de (post: Django By Example) possui três tags [python, django e web] depois de ler a documentação do Django.

https://docs.djangoproject.com/en/1.10/ref/models/querysets/#count

Disse queContagem (expressão) retorna o número de objetos que estão relacionados através da expressão fornecida. então o código

>>>alist[0].tags.all() 
[<Tag: django>, <Tag: python>, <Tag: web>]

mostra que há três tags em 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

mas aqui eu recebo o valor 1,
porque?

Eu entendo que o Django está contando apenas as tags "python" e "data" que eu incluí na minha cláusula de filtro - outras tags não são contadas.

A saída de "slist [0] .tags.all ()" mostra que o slist [0] tem três tags relacionadas a ele mesmo. Como a documentação do django diz que Count (expressão) retorna o número de objetos relacionados pela expressão fornecida, slist [0] .sam_tags deve ser 3 de acordo com a documentação, mas django-taggit torna slist [0] .sam_tags para seja 1.

Então, o que realmente quero saber é como o django-taggit permite que Count (expression) na cláusula filter apenas calcule o número de tags na condição de filtro.

questionAnswers(1)

yourAnswerToTheQuestion