2010-12-06 4 views
7

मैं एक django कुल कार्य करने की कोशिश कर रहा हूं, लेकिन वांछित परिणाम उत्पन्न करने में असमर्थ हूं।Django और कुल: विशिष्ट मूल्यों का योग?

मैं क्या मिल गया है:

income_posts.values_list('category__name','amount') 
[(u'Donation', Decimal("2000.00")), (u'Paycheck', Decimal("1200.00")), (u'Donation', Decimal("1000.00"))] 

वांछित परिणाम:

[(u'Donation', Decimal("3000.00")), (u'Paycheck', Decimal("1200.00))] 

मैं 'राशि' फ़ील्ड एक ही category__name है कि योग की जरूरत है।

उत्तर

14
this answer for a related question से

:

from django.db.models import Sum 
income_posts.values('category__name').order_by('category__name').annotate(total=Sum('amount')) 
+0

प्रासंगिक दस्तावेज: http://docs.djangoproject.com/en/dev/topics/db/aggregation/ –

+1

कारण है कि इस काम करता है, क्योंकि [ '.annotate()' एक के बाद कुछ अलग ढंग से काम करता है 'है .values ​​() '] (https://docs.djangoproject.com/en/dev/topics/db/aggregation/#values):" हालांकि, जब मानों() खंड का उपयोग किया जाता है जो कॉलम को बाधित करने के लिए उपयोग किया जाता है परिणाम सेट, एनोटेशन का मूल्यांकन करने की विधि थोड़ा अलग है। मूल क्वेरीसेट में प्रत्येक परिणाम के लिए एक एनोटेटेड परिणाम लौटने के बजाय, मूल परिणाम मानों() खंड में निर्दिष्ट फ़ील्ड के अद्वितीय संयोजनों के अनुसार समूहित होते हैं। " – mgalgs

2

आप पर Postgres हैं, तो आप विशिष्ट मानों की राशि के लिए django-pg-utilspackage उपयोग कर सकते हैं।

from pg_utils import DistinctSum 
income_posts.annotate(total=DistinctSum('amount') 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^