gpt4 book ai didi

python - Django 默认模型字段值

转载 作者:太空宇宙 更新时间:2023-11-04 00:24:07 25 4
gpt4 key购买 nike

假设我有一个这种类型的 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 在应用程序级别处理默认值。

关于python - Django 默认模型字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48049123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com