【问题标题】:Django creating a DateTimeField(auto_now_add) on a populated tableDjango 在填充表上创建 DateTimeField(auto_now_add)
【发布时间】:2015-11-03 23:07:13
【问题描述】:

我决定将created = Models.DateTimeField(auto_now_add = True) 字段添加到已经实例化对象的模型(当然没有created 字段),并将它们保存为initial_data

所以现在当我运行 syncdb 时,我收到错误 app_model.created may not be NULL,因为它试图加载没有该字段的对象。

那么我该如何解决这个问题?我希望它自动分配我将syncdb 称为object.created 的时间。我能做到吗?

感谢您的帮助!

【问题讨论】:

  • 你运行迁移了吗?
  • 出于某种原因我不想使用迁移。我坚持使用syncdb。可能不是很实用:)

标签: django django-models django-database django-syncdb


【解决方案1】:

我会使用默认值而不是 auto_now_add。

from django.utils.timezone import now

class Something(models.Model):
    created = models.DateTimeField(default=now, editable=False)

它还可以让您的数据字段了解时区并使用 UTC。

【讨论】:

    【解决方案2】:

    向模型添加新字段后,您需要通过运行以下命令来创建和运行迁移:

    >>> python manage.py makemigrations
    >>> python manage.py migrate
    

    在这种情况下,当它尝试创建新的非空字段时,它会询问您是要在模型中添加创建默认值还是现在要定义一个值,您可以选择添加一个值就在控制台中。当提示询问值时,你可以使用datetime模块,所以你可以写成值:

    datetime.datetime.now()
    

    【讨论】:

      猜你喜欢
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 2020-12-25
      • 1970-01-01
      相关资源
      最近更新 更多