2016-04-06 13 views
3

Diyelim ki üç etiketim var. Ona kaç tane nesne bağlı olduğunu göstermek istiyorum. böylece gibi:Django etiket, her bir etiketteki ürün için hesap sayısı

Elma (3)
Turuncu (0)
Muz (5)

Nasıl bu mümkün olan en basit şekilde çalışır hale yapmak, tercihen veritabanında yeni özelliklerini yaratmadan?

Sanırım bütün etiketler boyunca yineleme yapmam, bunları saymam ve bir sözlük içinde bir araya getirmem gerekecek, doğru mu? Örn: HTML şablonunda erişilebilir olacak şekilde

something = {'apple': X, 'orange': X, etc... 

Sonra bağlamda o kullanılabilir hale? Ya da daha basit bir yolu var mı? Teşekkür ederim!

+1

sonra daha iyi bir yolu olabilir. Bunun dışında yaptığınız şey de iyi. –

cevap

0

Genellikle, bunu yapmanın en kolay yolu, etiketleri etiketleyen aggregate kullanarak etiketli modeli sorgulamaktır.

1

Kullanım django-taggit-templatetags2 Sonra senin template ekleyin:

{% 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

Bunu yapan açıklamalı sorgu grubu ile.

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

isterseniz Ardından bir sözlük yapabilirsiniz: Nesnelerin ve etiketleri kod için modeller eklerseniz

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