如何将Decimal指定为Django South迁移的一次性值

时间:2013-02-22 07:50:22

标签: django django-south

我在我的模型中添加了一个DecimalField

dec_field = models.DecimalField(max_digits=6, decimal_places=3)

在我尝试使用South创建自动模式移植文件后,我尝试现在指定一个用于现有列的一次性值,但是......

? Please enter Python code for your one-off default value.
? The datetime module is available, so you can do e.g. datetime.date.today()
>>> Decimal('15.4')
! Invalid input: name 'Decimal' is not defined
>>> from decimal import *
! Invalid input: invalid syntax (<string>, line 1)

我可以指定一个十进制默认值(无损,所以浮点数不理想),如果是这样,怎么办?

2 个答案:

答案 0 :(得分:3)

查看代码:: https://bitbucket.org/andrewgodwin/south/src/81b93bfc927b46227103d094691b5ddcfc25f400/south/creator/actions.py?at=default#cl-190

我试过这样做:

    __import__('decimal').Decimal('0.445')

并且工作

但这很奇怪, 最正确的 只会放一个字符串 它会自动转换

或导入十进制 因为南迁移创造了

答案 1 :(得分:1)

接受的答案确实很奇怪。

正确的答案是,根据设计,南方迁移是用户可编辑的,schemamigration --auto并不总能完成一项完美的工作。在这种情况下,我只需输入一个易于在文件中找到的值(例如'0.445'),然后编辑文件,为Decimal添加正确的导入并修改代码以使用{ {1}}而不是生成的迁移中的值。