保存

时间:2016-03-05 09:38:34

标签: django python-2.7 django-models decimal

我知道这已被问过多次,但不知何故没有成功。我在模型Song中有这个模型字段。

sent_score = models.DecimalField(default= 0.0,max_digits=4,decimal_places=2,blank=True)

在我看来,我通过以下方式更新发送得分。

song_item = Song.objects.get(id=id)
com_list = Comment.objects.filter(song_id=id)
com_count = com_list.count()
pos_comments = com_list.filter(sentiment='positive')
pos_count = pos_comments.count()
getcontext().prec = 2
sent_score = Decimal(pos_count)/Decimal(com_count)

然而它仍然给我这个错误: InvalidOperation: quantize result has too many digits for current context

我也用这种方式尝试了量化方法:

sc = Decimal(pos_count)/Decimal(com_count)
Decimal(sc).quantize(Decimal('12.12'), rounding = ROUND_DOWN)
song_item.sent_score = sc
song_item.save()

但它仍然会出现同样的错误,请告诉我哪里出错了

1 个答案:

答案 0 :(得分:0)

你应该像第一次尝试一样不使用 model.store = {}; ,因为它会改变所有内容的精确度,而不仅仅是这一次计算。

第二个示例的问题是,getcontext().prec = 2甚至Decimal(sc).quantize(Decimal('12.12'), rounding=ROUND_DOWN)不会更改sc.quantize(Decimal('12.12'), rounding=ROUND_DOWN)。这是一个有效的例子:

sc