Skip to main content
 首页 » 编程设计

python之Django 默认模型字段值

2024年08月19日34lonelyxmas

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

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

一段时间后(以及一些对象之后)我明白我想为每个新对象保存创建时间,所以我添加了以下字段:

created = FloatField(default=time.time) 

现在假设我有一些旧对象,它们是在没有“创建”字段的情况下创建的。当我查询它们时,它们会收到默认的 time.time,即使它应该是 None。 我怎样才能为所有旧对象获得不同的值(value)?我只希望使用此默认值创建新对象,并将没有此字段的所有旧对象设为 None 或其他已知值。设置 null=True 没有任何区别。

谢谢!

请您参考如下方法:

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

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

      created = 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 在应用程序级别处理默认值。