2013-07-15 4 views
6

में कस्टम मैनेजर फ़ंक्शन को कॉल करना तो मैं एक व्यय शीट django ऐप बना रहा हूं और मैं सभी इनपुट व्यय के योग को प्रस्तुत करने की कोशिश कर रहा हूं।django टेम्पलेट्स

मैं एक कस्टम प्रबंधक बनाने के बाद योग की गणना करने के लिए:

class ExpenseManager(models.Manager): 
    def price_sum(self): 
    return super(ExpenseManager, self).aggregate(total_price = Sum('price'))['total_price'] 

और मेरे मॉडल के लिए यह कहा:

class Expense(models.Model): 
    ... 
    objects = models.Manager() 
    price_object = ExpenseManager() 
    ... 

मैं जानता हूँ कि मेरे प्रबंधक काम करता है क्योंकि जब मैं इसे खोल में निष्पादित मुझे अपने खर्चों का सही योग मिलता है - यानी मैंने Expense.price_object.price_sum() में रखा है और मुझे Decimal('254.77') वापस मिल गया है - लेकिन जब मैं इसे अपने टेम्पलेट में प्राप्त करने का प्रयास करता हूं तो यह केवल खाली दिखाई देता है।

मैं अपने चर में एक जोड़े को अलग अलग तरीकों से डालने की कोशिश की है, लेकिन यह से कोई भी काम किया है, उदाहरण के लिए:

{{price_object.price_sum}} 

या

{{expense.price_object.price_sum}} 

या मुझे हताश हो रही ...

{% for p in expense.price_object %} {{p.price_sum}} {% endfor %} 

या

{% for p in expense.price_object.price_sum %} {{p}} {% endfor %} 

लेकिन हाँ ... जब मैं पृष्ठ लोड करता हूं तब कुछ भी दिखाई नहीं देता है। क्या कोई मदद कर सकता है?

उत्तर

1

इस तरह अपने प्रबंधक विधि को परिभाषित करने का प्रयास करें:

class ExpenseManager(models.Manager): 
    def get_expenses(self): 
     return super(ExpenseManager, self).get_query_set().aggregate(total_price = Sum('interval'))['total_price'] 

मैं सिर्फ यह कोशिश की और यह मेरे लिए एक टेम्पलेट में राशि की गणना की।

+0

आपने इसे टेम्पलेट में कैसे कॉल किया? – sha256

+0

@ sha256, जैसा कि डैनियल रोज़मन के उत्तर में है, आपको केवल टेम्पलेट में मॉडल क्लास ऑब्जेक्ट पास करने की आवश्यकता है। – dragoon

+0

दोनों anwsers के लिए +1। सहायक – sha256

1

आपके टेम्पलेट उदाहरणों में से कोई भी शैल में आपके द्वारा किए गए कार्यों के बराबर प्रतीत नहीं होता है। खोल में, आपने मॉडल वर्ग, Expense से प्रबंधक को सही ढंग से बुलाया। यह वही है जो आपको टेम्पलेट से भी करने की ज़रूरत है। आप इसे मॉडल उदाहरण, केवल कक्षा से नहीं बुला सकते हैं, और मुझे लगता है कि expense नाम आपके पास एक उदाहरण है। आपको टेम्पलेट संदर्भ में कक्षा स्वयं पास करने की आवश्यकता होगी।

+0

क्षमा करें यदि यह मूल है, लेकिन आप कक्षा को कैसे पास करते हैं? वर्तमान में मेरे विचार में मैं 'all'expenses = Expense.objects.all() 'को' {' व्यय 'के रूप में संदर्भ के रूप में पास करता हूं: all_expenses} '(मैंने व्यय से व्यय को बदल दिया है क्योंकि यह एक के बजाय सभी खर्चों के लिए खाता है इसलिए जो मैंने ऊपर साझा किया है उससे तुलना में कोई समस्या नहीं है) – skscharr

+0

एक वर्ग एक वस्तु है, किसी और चीज की तरह। आप इसे उसी तरह से पास कर सकते हैं: '{'व्यय': व्यय}'। –

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