2017-04-24 53 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)