2016-03-06 57 views
0

考虑一个模型:如何计算在Django模板两次上下文变量之间的差异

class TempReport(models.Model): 
    id = models.AutoField(primary_key=True) 
    cost = models.FloatField() 
    revenue = models.FloatField() 
    # Some other fields not relevant to topic 
    class Meta: 
     managed = False 
     db_table = 'temp_report' 
     unique_together = (('sale_point', 'date'), ('id', 'sale_point'),) 
     @property 
     def net_income(self): 
      return self.revenue - self.cost 

我的目标是计算的净收入=收入 - 成本 为模板的代码:

<tbody> 
       {% for repdata in reporttable %} 
       <tr> 
        <td> {{ repdata.revenue }}</td> 
        <td> {{ repdata.cost }}</td> 
        <td> {{ repdata.net_income}}</td> 
       </tr> 
       {% endfor %} 
     </tbody> 

...和

def tempreport(request): 
    reporttable = TempReport.objects.values('id','cost','revenue') 
    return render_to_response('report.html', 
          {'reporttable': reporttable}, 
          context_instance = RequestContext(request)) 

我结束了一个空net_income即使没有错误米图消息存在。任何想法,为什么这可能是由?

回答

4

在模型上创建一个属性应该可以工作。代码上的缩进不正确。该属性应该是模型类的一个方法,而不是Meta类。

class TempReport(models.Model): 
    id = models.AutoField(primary_key=True) 
    cost = models.FloatField() 
    revenue = models.FloatField() 
    # Some other fields not relevant to topic 
    class Meta: 
     managed = False 
     db_table = 'temp_report' 
     unique_together = (('sale_point', 'date'), ('id', 'sale_point'),) 
    @property 
    def net_income(self): 
     return self.revenue - self.cost 

在您看来,不使用values(),因为这将返回字典而不是模型实例,你将无法进入酒店。

from django.shortcuts import render 

def tempreport(request): 
    reporttable = TempReport.objects.all() 

    for r in reporttable: 
     r.net_income = r.revenue - r.cost 
    return render(request, 'report.html', {'reporttable': reporttable}) 

说明我还更新了视图中使用render,而不是过时的render_to_response的。

+0

不,它不适合我。您能否按照我在问题中包含的观点来包容观点? –

+1

你还没有显示你的原始视图,所以我只能猜测问题是什么。你可能不应该使用'values()'。 – Alasdair

+0

我编辑了这个问题,并为您提供了原始视图。 –

相关问题