2014-03-05 25 views
1

簡單描述:Django 1.6如何在同一時間正確註釋Count()和Sum()?

#for each q in Question , q.votes is correct 
Question.objects.annotate(votes=Sum('vote__value')) 
#add a Count annotate, q.answers is correct, while q.votes not. 
Question.objects.annotate(votes=Sum('vote__value', distinct=True),answers=Count('answer', distinct=True),) 

enter image description here

如果我想在同一時間註釋計數()和總和(),怎麼樣?因此,我可以這樣做:

qs = Question.objects.annotate(votes=Sum('vote__value', distinct=True),answers=Count('answer', distinct=True),) 
for q in qs: 
    #do something with q.votes and q.answers in a template 
    #this will be convenient. 

Click Here下載測試項目代碼,如果needed.Test功能在raw.tests.test()

+1

你將如何爲此編寫單個SQL查詢? – anuragal

+0

@anuragal我不熟悉SQL ..你能舉個例子嗎? – tcpiper

回答

0

感謝anuragal。他提醒我。我想的額外

qs3 = Question.objects.extra(
    select={ 
    'answers': 'SELECT COUNT(*) FROM raw_answer WHERE raw_answer.question_id = raw_question.id', 
    'votes':'SELECT SUM(value) FROM raw_vote WHERE raw_vote.question_id = raw_question.id', 
    }, 

這將是確定。