Ajouter une valeur de comptage à définir
-
10-12-2019 - |
Question
J'utilise Django-taggit pour baliser des éléments dans une application de liste de tâches.
J'essaie de lister chacune des balises ainsi que le nombre d'actions associées à chaque balise afin qu'elle puisse lire :
Tag A (1)
Tag B (3)
Tag C (2)
La balise A contient 1 élément, la balise B en contient 3, etc.
J'ai ajouté un champ booléen à Django-taggit.Alors maintenant, j'obtiens une liste de balises comme celle-ci :
visible_tags = Tag.objects.filter(visible=True).order_by('name')
hidden_tags = Tag.objects.filter(visible=False).order_by('name')
Je peux obtenir le nombre d'éléments (actions) comme ceci :
for tag in visible_tags:
print tag
print Action.objects.filter(tags__name__in=[tag]).count()
Maintenant, je souhaite attacher ces décomptes aux ensembles visible_tags et Hidden_tags afin de pouvoir les parcourir dans le modèle comme ceci :
{% for tag in visible_tags %}
{{ tag }} ({{ tag.count }})<br>
{% endfor %}
Comment puis-je attacher une valeur .count à chaque balise dans visible_tags et dans Hidden_tags ? Je suppose que je dois parcourir toutes les balises de chaque ensemble ?
La solution
Utilisez des annotations : https://docs.djangoproject.com/en/dev/topics/db/aggregation/
from django.db.models import Count
Tag.objects.annotate(action_count=Count('action'))
(Vous devrez peut-être modifier cela un peu.Je suppose que le nom associé à Action
)