Pregunta

Estoy usando django-taggit para etiquetar elementos en una aplicación de lista de tareas pendientes.

Estoy tratando de enumerar cada una de las etiquetas junto con la cantidad de acciones asociadas con cada etiqueta para que pueda leerse:

Tag A (1)
Tag B (3)
Tag C (2)

La etiqueta A tiene 1 artículo, la etiqueta B tiene 3, etc.

Agregué un campo booleano a django-taggit.Ahora obtengo una lista de etiquetas como esta:

visible_tags = Tag.objects.filter(visible=True).order_by('name')
hidden_tags = Tag.objects.filter(visible=False).order_by('name')

Puedo obtener el recuento de elementos (acciones) de esta manera:

for tag in visible_tags:
    print tag
    print Action.objects.filter(tags__name__in=[tag]).count()

Ahora quiero adjuntar estos recuentos a las etiquetas visibles y etiquetas ocultas establecidas para poder iterar sobre ellas en la plantilla de esta manera:

{% for tag in visible_tags %}
    {{ tag }} ({{ tag.count }})<br>
{% endfor %}

¿Cómo puedo adjuntar un valor .count a cada etiqueta dentro de etiquetas_visibles y dentro de etiquetas_ocultas? ¿Supongo que tengo que iterar sobre todas las etiquetas de cada conjunto?

¿Fue útil?

Solución

Utilice anotaciones: https://docs.djangoproject.com/en/dev/topics/db/aggregation/

from django.db.models import Count

Tag.objects.annotate(action_count=Count('action'))

(Quizás tengas que modificarlo un poco.Estoy adivinando el nombre relacionado para Action)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top