假设我有一个这种类型的 Django 对象:
class Some(Model):
some_value = CharField(max_length=20)
一段时间后(以及一些对象之后)我明白我想为每个新对象保存创建时间,所以我添加了以下字段:
created = FloatField(default=time.time)
现在假设我有一些旧对象,它们是在没有“创建”字段的情况下创建的。当我查询它们时,它们会收到默认的 time.time,即使它应该是 None。 我怎样才能为所有旧对象获得不同的值(value)?我只希望使用此默认值创建新对象,并将没有此字段的所有旧对象设为 None 或其他已知值。设置 null=True 没有任何区别。
谢谢!
请您参考如下方法:
如果我正确理解您的问题,您想要添加一个默认为现在的 created 字段,但想将它设置为 None 用于旧行。您可以通过进行两次迁移来实现此目的:
添加新字段并将其默认为
Nonecreated = FloatField(null=True, default=None)运行
makemigrations更改新字段的默认值:
created = FloatField(null=True, default=time.time)运行
makemigrations运行
迁移
当第一次迁移运行时,所有旧行 created 都将设置为 None(因为它们没有值,将使用默认值)。当秒迁移运行时,旧行不会更改,因为它们已经有一个值。新行将使用默认值 (time.time)。
没有迁移
syncdb 如果表已经在数据库中创建,则什么都不做。您应该手动修改您的数据库(即 SQL 的 ALTER TABLE 命令)
- 修改您的数据库并添加一个可空的
created字段,并将NULL作为默认值。 - 将字段添加到您的代码中(使用
default=time.time)
当您向数据库添加一个新的可为空的列时,所有现有行都将设置为 NULL 并且 Django 在应用程序级别处理默认值。
