Уведомления

Группа в Telegram: @pythonsu

#1 Май 29, 2012 23:47:41

slotmim
Зарегистрирован: 2012-05-16
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

many2many выборка

допустим у нас есть модели
class Lang(models.Model):
name = models.CharField(max_length=200)

class Text(models.Model):
name = models.CharField(max_length=200)
lang = models.ManyToManyField(Lang)

подскажите пожалуйста
как мне вычислять сколько Текстов(Text) в одном Языке(Lang)? И вывести их в упорядоченном виде по количеству текстов?
Нужно вывести статистику языков. База уже заполнена, не знаю как вывести.

Отредактировано slotmim (Май 29, 2012 23:52:21)

Офлайн

#2 Май 30, 2012 06:03:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

many2many выборка

class Test(TemplateView):
    template_name = 'test/test.haml'
    def get_context_data(self, **kwargs):
        context=super(Test, self).get_context_data(**kwargs)
        l=Lang.objects.all()
        context['list']=[(i,i.text_set.all()) for i in  l]
        return context
Русский [<Text: Анна Коренина>, <Text: Русско-татарский разговорник>, <Text: Русско-немецко-татарский справочник>, <Text: Сказки Пушкина>, <Text: Сказки Носова>] 
Английский [<Text: Анна Коренина>]
Немецкий [<Text: Русско-немецко-татарский справочник>, <Text: Ницше в оригинале>]
Татарский [<Text: Русско-татарский разговорник>, <Text: Русско-немецко-татарский справочник>]
from django.db.models import Count
class Test(TemplateView):
    template_name = 'test/test.haml'
    def get_context_data(self, **kwargs):
        context=super(Test, self).get_context_data(**kwargs)
        list=Lang.objects.annotate(text_count=Count('text')).order_by('-text_count')
        context['list']=list
        return context

{% for i in list %}
{{ i }}
{{ i.text_count }}
<br>
{% endfor %}

Русский 5 
Немецкий 2
Татарский 2
Английский 1



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version