我无法找到将计算数据打印到模板的方法。我会尽力描述我的情况。我有一个名为Dividend的模型:
class Dividend(models.Model):
date = models.DateField('pay date')
amount = models.FloatField( validators=[MinValueValidator(0.001), MaxValueValidator(1000000000000000.0)])
price = models.FloatField('price per share',
validators=[MinValueValidator(0.001), MaxValueValidator(1000000000000000.0)])
股息数据表如下所示:
Date Dividend Price
Sept. 26, 2013 $0.8 $24.75
June 26, 2013 $0.7 $24.74
March 26, 2013 $0.6 $23.59
Dec. 13, 2012 $0.4 $19.18
Sept. 26, 2012 $0.1 $20.66
我想增加每股股息的百分比(如果是的话)。所以像这样:
Date Dividend Price
Sept. 26, 2013 $0.8 (+12,5%) $24.75
June 26, 2013 $0.7 (+14,28%) $24.74
March 26, 2013 $0.6 (+50%) $23.59
Dec. 13, 2012 $0.4 (+300%) $19.18
Sept. 26, 2012 $0.1 $20.66
我该怎么做?我有列表中的数据,因为我添加了一些我不想插入db的分红。所以我有一个红利对象列表。 基本上我想计算视图中的百分比变化,并将其作为另一个参数添加到每个股息。
for dividend in dividend_list:
dividend.change = ...calculation...
而不是简单地将其添加到我的模板中
{% for dividend in stock.dividend_set.all|order_by:"date" %}
<tr>
<td>{{ dividend.date }}</td>
<td>${{ dividend.amount }} ({{ dividend.change }}%)</td>
<td>${{ dividend.price }}</td>
</tr>
{% endfor %}
但是我不能这样做,因为Dividend没有模型字段变化。我存储在新的QueryDict中,其中key是dividend.id和值百分比变化。但我不能在模板中执行query_dict [dividend.id]。那么最好的方法是什么?我很抱歉提出这样一个微不足道的问题,但我不知道该寻找什么。对于不满意的标题也很抱歉,如果我在你的回复后想出更具描述性的内容,我会更改它。
答案 0 :(得分:1)
您可以将任意数据添加到视图中的实例,而无需将它们作为模型字段。这很好:
for dividend in dividend_list:
dividend.change = ...calculation...
确保将dividend_list
传递给模板上下文。您使用的是基于类的视图还是功能视图?对于基于类的视图,请在get_context_data
中执行此操作并将其添加到返回值。对于功能视图,将修改后的dividend
列表(不再是惰性求值查询集)放入字典参数中:
return render(template_name, {'dividend_list': dividend_list})
然后在模板中迭代它。
{% for dividend in dividend_list %}
<tr>
<td>{{ dividend.date }}</td>
<td>${{ dividend.amount }} ({{ dividend.change }}%)</td>
<td>${{ dividend.price }}</td>
</tr>
{% endfor %}
您还可以在Dividend模型上编写一个方法来进行计算,然后在模板循环中调用它,甚至编写一个自定义模板标签来显示红利。
另外,你真的不想用FloatField
代表钱。请改用DecimalField
。