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

How to calculate the difference between two context variables in Django template

考虑一个模型:

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 即使没有错误消息存在。知道为什么这可能是由以下原因引起的吗?

在模型上创建 属性 应该可行。您的代码缩进不正确。 属性 应该是模型 class 的方法,而不是 Meta class.

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(),因为那样会 return 字典而不是模型实例,并且您将无法访问 属性。

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