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

如何计算Django模板中两个上下文变量之间的差异,django,templates,models,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_tabl

考虑一个模型:

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>

即使没有错误信息,我的净收入也是空的。任何关于为什么这可能是由?

在模型上创建属性引起的想法都应该可行。代码上的缩进不正确。属性应该是模型类的方法,而不是元类

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\u to\u响应

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

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\u to\u响应

不,它对我不起作用。请你根据我在问题中的观点来考虑这个观点,好吗?你没有展示你的原始观点,所以我只能猜测问题出在哪里。您可能不应该使用
values()
。我已经为您编辑了问题并包含了原始视图。如果我使用reporttable=TempReport.objects.all(),那么一切都正常。这有点离题了,但是如果我使用objects.all(),我怎么能包含一个字段'sale\u point\u legal\u entities\u parent\u id',它是通过内部连接多个表生成的字段?您可以使用类似于
{repdata.sale\u point.legal\u entities.parent\u id}
的内容跟踪外键。您可能会发现减少查询数量很有用。我同意这是离题的,所以如果你有任何进一步的疑问,最好问一个新问题。不,它不适合我。请你根据我在问题中的观点来考虑这个观点,好吗?你没有展示你的原始观点,所以我只能猜测问题出在哪里。您可能不应该使用
values()
。我已经为您编辑了问题并包含了原始视图。如果我使用reporttable=TempReport.objects.all(),那么一切都正常。这有点离题了,但是如果我使用objects.all(),我怎么能包含一个字段'sale\u point\u legal\u entities\u parent\u id',它是通过内部连接多个表生成的字段?您可以使用类似于
{repdata.sale\u point.legal\u entities.parent\u id}
的内容跟踪外键。您可能会发现减少查询数量很有用。我同意这是离题的,所以如果你有任何进一步的疑问,最好问一个新问题。