Frage

Ich verwende Django-Taggit, um Elemente in einer Aufgabenlisten-App zu markieren.

Ich versuche, jedes der Tags zusammen mit der Anzahl der mit jedem Tag verbundenen Aktionen aufzulisten, damit es wie folgt aussieht:

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

Tag A hat 1 Artikel, Tag B hat 3 usw.

Ich habe Django-Taggit ein boolesches Feld hinzugefügt.Jetzt erhalte ich eine Liste mit Tags wie diese:

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

Ich kann die Anzahl der Elemente (Aktionen) wie folgt ermitteln:

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

Jetzt möchte ich diese Zählungen an den Satz „visible_tags“ und „hidden_tags“ anhängen, damit ich sie in der Vorlage wie folgt durchlaufen kann:

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

Wie kann ich jedem Tag in „visible_tags“ und „hidden_tags“ einen .count-Wert hinzufügen? Ich gehe davon aus, dass ich alle Tags in jedem Satz durchlaufen muss?

War es hilfreich?

Lösung

Anmerkungen verwenden: https://docs.djangoproject.com/en/dev/topics/db/aggregation/

from django.db.models import Count

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

(Möglicherweise müssen Sie das etwas anpassen.Ich vermute den entsprechenden Namen für Action)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top