2017-04-24 165 views
1

大家好,這裏是我的問題:如何計算屬性的總和

models.py

class Plant(models.Model) 
    nominal_power = models.PositiveIntegerField() 
    module_nominal_power= models.PositiveIntegerField() 

@property 
    def no_modules(self): 
     return round(self.nominal_power*1000/self.module_nominal_power) 

views.py

def home(request): 
    plants = Plant.objects.filter(user=request.user) 
    total_power = plants.aggregate(sum=Sum('nominal_power')) 
    total_no_modules = plants.aggregate(sum=Sum('no_modules'))['sum'] 
    template = 'data/home.html' 
    context = {'plants':plants, 
       'total_power':total_power, 
       'total_no_modules':total_no_modules} 
    return render(request, template, context) 

而且我得到的錯誤無法將關鍵字'no_modules'解析爲字段。 無法將關鍵字'no_modules'解析爲字段。

我不承認失敗的含義,但是如何獲得總數?

回答

2

可能使用F級

from django.db.models import F 
total_no_modules = plants.aggregate(sum=Sum(F('nominal_power')*1000-F('module_nominal_power'))) 
+0

你的解決方案是正確的,但我要替換'(F( 'nominal_power') * 1000-F('module_nominal_power')'''no_modules' – George

+0

你不能在你的查詢中使用model屬性,因爲django orm不能將你的屬性函數轉換爲SQL查詢,但是如果你不想使用模塊,你可以得到所有的植物和總和財產,如下所示:sum(map(lambda plant:plant.no_module,plants)) –

0

@Marcin你是正確的,但我一直在尋找這樣的:

def home(request): 
     plants = Plant.objects.filter(user=request.user) 
     total_power = plants.aggregate(sum=Sum('nominal_power')) 
     total_no_modules = 0 
     for plant in plants 
      total_no_modules = total_no_modules + plant.no_modules 
     template = 'data/home.html' 
     context = {'plants':plants, 
        'total_power':total_power, 
        'total_no_modules':total_no_modules} 
     return render(request, template, context)