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.

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top