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 ?

Était-ce utile?

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top