Django 默认模型字段值



假设我有一个这种类型的Django对象:

class Some(Model):
some_value = CharField(max_length=20)

过了一会儿(以及之后的一些对象),我明白我想为每个新对象节省创建的时间,所以我添加了以下字段:

created = FloatField(default=time.time)

假设现在我有一些没有"创建"字段的旧对象。当我查询它们时,它们会收到默认的 time.time,即使它应该是 None。 如何为所有旧对象获取不同的值?我只希望使用此默认值创建新对象,并说所有没有此字段的旧对象均为 None,或其他一些已知值。设置 null=True 不会产生任何影响。

谢谢!

如果我正确理解您的问题,您想添加一个默认为现在的created字段,但希望将其设置为旧行的None。您可以通过进行两次迁移来实现此目的:

  • 添加新字段并将其默认为None

    created = FloatField(null=True, default=None)
    
  • 运行makemigrations

  • 更改较新字段的默认值:

    created = FloatField(null=True, default=time.time)
    
  • 运行makemigrations

  • 运行migrate

首次迁移运行时,所有旧行created都将设置为None(因为它们没有值,将使用默认值)。当秒迁移运行时,旧行不会更改,因为它们已经具有值。新行将使用默认值 (time.time)。

<小时 />

无迁移

如果表已在数据库中创建,则syncdb不执行任何操作。您应该手动修改数据库(即ALTER TABLE个 SQL 命令)

  • 修改数据库并添加默认值为NULL的可为空的created字段。
  • 将字段添加到代码中(带default=time.time)

当你向数据库添加新的可为空的列时,所有现有行都将设置为NULL,并且 Django 在应用程序级别处理默认值。

最新更新