考虑一个模型:
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。任何想法,为什么这可能是由?
引起的答案 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
。