2016-04-06 7 views
3

Sagen wir, ich habe drei Tags. Ich möchte zeigen, wie viele Objekte damit verknüpft sind. Wie so:Django Taggit, Auflistung für jedes Tag

Apfel (3)
Orange (0)
Banana (5)

Wie kann ich es die einfachste Art und Weise möglich zu machen arbeiten, vorzugsweise ohne neue Attribute in der Datenbank zu erstellen?

Ich schätze, ich muss alle Tags durchlaufen, zählen sie und beide in einem Wörterbuch zusammen, richtig? ZB:

Dann machen Sie das im Kontext verfügbar, so dass es in der HTML-Vorlage zugänglich ist? Oder gibt es einen einfacheren Weg? Vielen Dank!

+1

Wenn Sie Ihre Modelle für Objekte und Tags Code hinzufügen, dann könnte es einen besseren Weg geben. Ansonsten ist das, was du tust, auch in Ordnung. –

Antwort

0

Normalerweise ist der einfachste Weg, dies zu tun, durch Abfrage des markierten Modells mit aggregate, Summieren der Tags.

1

Verwenden django-taggit-templatetags2

Dann fügen Sie in Ihre template:

{% load taggit_templatetags2_tags %} 

{% get_taglist as tags for 'yourapp.yourmodel' %} 
    ... 

    <ul> 
    {% for tag in tags %} 
     <li>{{tag}} ({{tag.num_times}})</li> 
    {% endfor %} 
    </ul> 

    ... 
1

Ich tat dies mit einer kommentierten queryset.

queryset = Tag.objects.all() 
queryset2 = queryset.annotate(num_times=Count('taggit_taggeditem_items')) 

Sie können dann ein Wörterbuch, wenn Sie wollen:

mydict = {} 
for tag in querset2: 
    mydict[tag.name] = tag.num_times