在我的数据库中,我有一个我想用来存储学分的字段。积分是0.5
的倍数,所以例如一个人可以有1,1.5或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等。
答案 0 :(得分:1)
更改字段的小数位数
models.DecimalField(max_digits=10, decimal_places=1,
null=True, blank=True)
答案 1 :(得分: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。