0

在我的数据库中,我有一个用于存储学分的字段。积分是 的倍数0.5,例如一个人可以有 1、1.5、10 或 100 等

我是否为此在数据库中选择了正确的字段?...

 models.DecimalField(max_digits=10, decimal_places=5,
                                      null=True, blank=True)

同样在显示余额时,我执行以下操作....

 def _balance(self):
        aggregates = self.transactions.aggregate(sum=Sum('amount'))
        sum = aggregates['sum']
        return D('0') if sum is None else sum

例如,这给了我 10.00000 这不是我想要的。我想要 10 或者如果它有一半 10.5 等等。

4

2 回答 2

1

更改字段的小数位

 models.DecimalField(max_digits=10, decimal_places=1,
                                  null=True, blank=True)
于 2013-03-24T12:33:41.147 回答
0

Django 的 DecimalField 将值填充为固定长度的小数。例如,如果您设置 decimal_places=1,您将始终得到小数点后一位数,即使它为零。

我为自己解决此问题的方法是覆盖 models.DecimalField 中的行为,以创建自己的字段 VariableDecimalField,如下所示:

class VariableDecimalField(models.DecimalField):

  def get_db_prep_save(self, value, connection):
    s = str(value)
    return self.to_python(s.rstrip('0').rstrip('.') if '.' in s else s)

这将去掉任何微不足道的尾随零,如果没有小数点,也会去掉小数点。在它存储在数据库中之前。但是,如果您希望保留尾随零,如果用户以这种方式输入,只需执行此操作。

class VariableDecimalField(models.DecimalField):

  def get_db_prep_save(self, value, connection):
    return self.to_python(value)

然后只需使用 VariableDecimalField 而不是 DecimalField。

于 2014-02-25T00:38:20.550 回答