2013-09-08 3 views
1

Я запроса Django модели, используя ниже запроса:Как запросить Django модели с использованием фильтра

for i in models.short_url.objects.filter(created_at__month=m,url_hash='DCmuih'): 
    count = i.click_info_set.count() 

Существует один способ получить количество, но без месяца фильтр

print models.short_url.objects.get(url_hash='DCmuih').click_info_set.count() 

Но как я используйте тот же запрос, но без цикла ... Может кто-нибудь мне помочь.

+0

насчет [аннотировать] (https://docs.djangoproject.com/en/dev/ темы/db/aggregation/# порядок-аннотат-и-фильтр-предложения)? 'models.short_url.objects.filter (created_at__month = m, url_hash = 'DCmuih'). annotate (c = Count ('click_info')) ' – danihp

ответ

1

Это всегда немного трудно просто угадать одной только QuerySet, но это должно примерно это сделать:

from django.db.models import Count 

queryset = models.short_url.objects.filter(
    created_at__month=m, 
    url_hash='DCmuih', 
).annotate(click_info_count=Count('click_info__id')) 

for short_url in queryset: 
    print short_url, short_url.click_info_count 
+1

вы должны изменить' Count ('id') 'by' Count ('click_info__id') ' – danihp

+0

Он не дает счет, а просто возвращает объект на основе запроса .... –

+0

Вы получите' '' click_info_count''' для каждого возвращаемого объекта. –

Смежные вопросы