gpt4 book ai didi

Django 1.8 迁移。在创建数据库后添加 DateTimeField。最佳实践?

转载 作者:行者123 更新时间:2023-12-03 22:31:21 25 4
gpt4 key购买 nike

所以在我第一次迁移之后的一段时间里,我决定要包含这些字段:

created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)

进入我的模型之一。当我 makemigrations它给了我 You are trying to add a non-nullable field 'created' to episode without a default; we can't do that (the database needs
something to populate existing rows).

所以我然后把它改成
created = models.DateTimeField(auto_now_add=True, default=datetime.now)

尝试后 makemigrations再次,它说 at_api.Episode.modified: (fields.E160) The options auto_now, auto_now_add, and default are mutually exclusive. Only one
of these options may be present.

好的,所以我继续删除了 auto_now_add
created = models.DateTimeField(default=datetime.now)

我现在可以 makemigrations没有任何问题。然后我后来删除了 default=datetime.now并将其替换为 auto_now_add=True ,并再次迁移,没有任何问题。但是,我不禁感到这可能不是最好的做事方式。我觉得项目后期可能会出错。

最佳答案

我认为这里的最佳实践是使字段可以为空。你的什么created字段此时的意思是:“创建实例的时间,或者我运行迁移的任意时间。”表示缺少值的标准方法是 NULL ,而不是任意值。

也就是说,如果你确实想使用一些任意值,你只需要告诉 Django 它是什么。通常 makemigrations为您提供指示用于现有行的一次性值的选项 - 没有发生吗?

更费力的方法是将字段声明为可为空,然后创建数据迁移以填充所需的值,然后使其不可为空。你所做的基本上是一个简化版本。除了 created 的问题之外,我认为它不会造成任何问题。并不是创建实例的时间。

关于Django 1.8 迁移。在创建数据库后添加 DateTimeField。最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31498842/

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