假设我有一个这种类型的Django对象:
class Some(Model):
some_value = CharField(max_length=20)
过了一会儿(后来有几个对象),我知道我想为每个新对象保存创建的时间,所以我添加了以下字段:
created = FloatField(default=time.time)
现在假设我有一些旧的对象是在没有"创建"的情况下创建的。领域。当我查询它们时,它们会收到默认的time.time,即使它被认为是None。 如何为所有旧对象获取不同的值?我只希望使用此默认值创建新对象,并将没有此字段的所有旧对象称为None或其他某些已知值。设置null = True并没有什么不同。
谢谢!
答案 0 :(得分:1)
如果我正确理解了您的问题,您希望现在添加created
字段默认但希望将其设置为None
旧行。您可以通过进行两次迁移来实现此目的:
添加新字段并将其默认为None
created = FloatField(null=True, default=None)
运行makemigrations
更改较新字段的默认值:
created = FloatField(null=True, default=time.time)
运行makemigrations
运行migrate
首次迁移时,所有旧行created
都将设置为None
(因为它们没有值,将使用默认值)。当秒迁移运行时,旧行不会更改,因为它们已经有值。新行将使用默认值(time.time
)。
syncdb
不执行任何操作。您应该手动修改数据库(即SQL的ALTER TABLE
命令)
created
的可用NULL
字段作为默认值。default=time.time
)向DB添加新的可空列时,所有现有行都将设置为NULL
,Django将在应用程序级别处理默认值。