Adicione valor de contagem para definir
-
10-12-2019 - |
Pergunta
Estou usando Django-taggit para marcar itens em um aplicativo de lista de tarefas.
Estou tentando listar cada uma das tags junto com o número de ações associadas a cada tag para que possa ser lido:
Tag A (1)
Tag B (3)
Tag C (2)
A tag A tem 1 item, a tag B tem 3, etc.
Adicionei um campo booleano ao Django-taggit.Agora estou recebendo uma lista de tags como esta:
visible_tags = Tag.objects.filter(visible=True).order_by('name')
hidden_tags = Tag.objects.filter(visible=False).order_by('name')
Posso obter a contagem de itens (ações) assim:
for tag in visible_tags:
print tag
print Action.objects.filter(tags__name__in=[tag]).count()
Agora quero anexar essas contagens ao conjunto visível_tags e hidden_tags para que eu possa iterá-las no modelo assim:
{% for tag in visible_tags %}
{{ tag }} ({{ tag.count }})<br>
{% endfor %}
Como posso anexar um valor .count a cada tag em visíveis_tags e em hidden_tags? Presumo que tenho que iterar todas as tags em cada conjunto.
Solução
Use anotações: https://docs.djangoproject.com/en/dev/topics/db/agregação/
from django.db.models import Count
Tag.objects.annotate(action_count=Count('action'))
(Talvez você precise ajustar isso um pouco.Estou adivinhando o nome relacionado para Action
)