Django破碎的迁移

时间:2015-07-08 10:34:13

标签: python django postgresql

我在模型中创建并随后更改了DecimalField。现在,当我尝试运行python manage.py migrate时,我收到以下错误:

decimal.InvalidOperation: quantize result has too many digits for current context

在这里阅读了各种相关问题后,我尝试增加max_digits,这没有用。 我已经手动删除了我的postgreSQL数据库中的模型,希望能够在我迁移模型时重新创建它,但我仍然会遇到同样的错误而无法迁移模型并重新创建模型数据库中。

这是有问题的模型:

class Version(models.Model):
    version_number = models.DecimalField(default=1.0, max_digits=3,
                                     decimal_places=2)

我该怎么做才能解决这个问题?

编辑当我更改了DecimalField时,我更改了max_digits

3 个答案:

答案 0 :(得分:4)

看起来你的问题实际上不是DecimalField,而是手动删除你的表作为故障排除步骤。

据我所知,makemigrations工具不会根据现有数据库中的内容进行更改,而是根据先前迁移中定义的内容进行更改。

因此,如果您在不使用它的情况下进行更改,则必须手动创建或编辑迁移文件以进行更正。

有关编辑迁移文件的示例,请参阅以下内容:

https://docs.djangoproject.com/en/1.8/howto/writing-migrations/

我不确定这里的协议是什么,但是可以找到首次创建表的迁移,并将适用的序列复制到您的挂起的迁移文件中。

答案 1 :(得分:1)

好的,所以你在这里设置默认值有问题:

您需要导入十进制。

from decimal import Decimal
class Version(models.Model):
    version_number = models.DecimalField(default=Decimal('1.00'), max_digits=3,
                                     decimal_places=2)

答案 2 :(得分:0)

所以我有同样的问题,无论我如何更改现有的DecimalField,我都会收到此错误(decimal.InvalidOperation)

要查找,我在django utils.py(... \ site-packages \ django \ db \ backends)中设置pdb / set_trace以查看导致此异常的原因

在我的例子中,它使用了max_digits = 4和decimal_places = 4(这也是该模型字段的最新值)。 所以我上了功能,发现其中一个早期的迁移导致了这个。

我将迁移以及与此模型字段相关的所有其他迁移更改为最新版本并且已修复