2012-12-10 12 views
5

मेरे पास एक मॉडल है जिसमें मैं तालिका से मूल्यों के औसत निकालने के लिए Django ORM का उपयोग करता हूं। मैं उस औसत मूल्य को गोल करना चाहता हूं, मैं यह कैसे कर सकता हूं?Django ORM एक औसत परिणाम कैसे गोल करें

नीचे देखें मैं YYYY-MM प्रारूप में दिनांकित समूह मूल्य से औसत मूल्य निकाल रहा हूं, मैं स्वचालित रूप से निकटतम संख्या में गोल औसत मान निकालना चाहता हूं।

rs = Prices.objects.all.extra(select={ 
    'for_date': 'CONCAT(CONCAT(extract(YEAR from for_date), "-"), 
     LPAD(extract(MONTH from for_date), 2, "00"))' 
    }).values('for_date').annotate(price=Avg('price')).order_by('-for_date') 
+1

मैं Django क्वेरीसमूह API संदर्भ पर एक दौर समारोह भी नहीं मिलता है:

यहाँ SQLite में दो दशमलव स्थानों के लिए पूर्णांक बनाना Django Aggregation topic guide से बुक मॉडल का उपयोग कर एक उदाहरण है() लौटे परिणाम के दौर के लिए? – jxs

+0

क्या आपने मौका से यह काम किया है? –

उत्तर

-1

Django क्वेरीसेट के लिए दौर प्रदान नहीं करता है।

मुझे लगता है कि आपको गणित मॉड्यूल से ceil() या floor() का उपयोग करके इसे मैन्युअल रूप से करना होगा।

http://docs.python.org/2/library/math.html#math.floor या http://docs.python.org/2/library/math.html#math.ceil

तो तुम कर सकते हैं:

import math 
float_price_avg = rs.get('price', 0.) 
floor_price_avg = math.floor(rounded_price_avg) 
ceil_price_avg = math.ceil(rounded_price_avg) 
16

उपयोग Func() expressions (1.8 के बाद से उपलब्ध है)। क्यों अजगर देशी दौर का उपयोग नहीं कर

class Round(Func): 
    function = 'ROUND' 
    template='%(function)s(%(expressions)s, 2)' 

Book.objects.all().aggregate(Round(Avg('price'))) 
+0

आपकी एनोटेशन या एकत्रीकरण की जटिलता के आधार पर, आपको उपनाम असाइन करने की आवश्यकता हो सकती है। उदा। 'Book.objects.all()। कुल (rounded_avg_price = दौर (औसत ('मूल्य'))' ' – Duncan

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