1

我正在使用 Django。我正在开发一个视图功能,以尝试显示我的数据库中的预算交易列表以及日期、类别和描述等其他信息。(交易是我的模型,所以它们是交易对象。)交易金额以整数格式存储在数据库中(遵循我在这里看到的一些建议),因为货币据说更容易处理转换为整数并返回十进制。(现在我不太确定。)在将对象集发送到模板进行显示之前,我正在尝试转换回十进制。我不知道如何从每个 Transaction 对象中提取金额,将其转换为十进制,然后将其返回到对象中。我正在尝试做这样的事情:

object_list = Transaction.objects.all()

for obj in range(0,object_list.count()):
    object_list[obj].dec_amount = Decimal(object_list[obj].amount/100).quantize(Decimal('0.01'))

和模板,现在非常简单:

{% for item in object_list %}

<tr>
<td>{{ item.dec_amount }}</td>
<td>{{ item.category }}</td>
<td>{{ item.date }}</td>

</tr>

{% endfor %}

我基本上是在尝试在每个对象中创建一个新的 dec_amount 属性,但我不知道这是否有效。dec_amount 在我的模板中不可用。我也只是认为必须有一种更优雅的方法来迭代对象以更新它们的数量或创建一个具有十进制值的新属性。或者,也许有一种更有效的方式来拉取 QuerySet,但我不知道如何以这种方式轻松地将两个查询之间的行保持在一起。如何使用循环来修改 QuerySet 的每个对象中的一个属性?

谢谢你的帮助。我得说,我很沮丧——来自 PHP,整个 Decimal 的东西似乎更复杂。

编辑:试图改进我的术语。

4

2 回答 2

2

如果您只需要访问模板中的十进制值,您可以考虑这样的属性:

class Transaction(models.Model):
    @property
    def dec_amount(self):
        return Decimal(self.amount / 100).quantize(Decimal('0.01'))
于 2012-12-11T04:04:05.240 回答
1

Jesse the Game 的答案是正确的。您还可以将循环重写为:

for obj in object_list:
    obj.dec_amount = Decimal(object_list[obj].amount/100).quantize(Decimal('0.01'))
于 2012-12-11T09:32:48.970 回答