如何计算Django模板中两个上下文变量之间的差异

时间:2016-03-06 21:01:13

标签: django templates models

考虑一个模型:

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。任何想法,为什么这可能是由?

引起的

1 个答案:

答案 0 :(得分: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