如何计算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}
的内容跟踪外键。您可能会发现减少查询数量很有用。我同意这是离题的,所以如果你有任何进一步的疑问,最好问一个新问题。