Zählwert zum Festlegen hinzufügen
-
10-12-2019 - |
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?
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
)