手动创建对象时不应用Django Model Field默认值

时间:2012-09-06 21:46:42

标签: python django

假设我的对象的DecimalField默认设置为20。当我在python中创建一个对象而没有为DecimalField指定一个值时,它是None

如何在每次提供值时确保应用默认值?

class SomeModel(models.Model):
    """Demonstrate the flaw of the default value."""

    dec_field = models.DecimalField(default=1, blank=True, null=True)


my_model = SomeModel()
my_model.save()  # this is where I expect the dec_field to become Decimal('1.0')
                 # instead it's None

2 个答案:

答案 0 :(得分:3)

确保您的模型和数据库与South等迁移工具同步,或者删除表并重新同步。

答案 1 :(得分:1)

应使用您所描述的内容设置默认值,需要有关您的示例的更多信息。但如果您想覆盖,或手动设置默认值,您可以执行以下操作;

DEC_FIELD_DEFAULT = 20
class Example(models.Model):
    dec_field = models.DecimalField(default=DEC_FIELD_DEFAULT)

    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(self, *args, **kwargs)
        self.dec_field = DEC_FIELD_DEFAULT