Django auto_now的行为

use*_*631 1 django django-models

我有以下型号:

class MetaData(models.Model):
    created_at = models.DateTimeField(auto_now_add=True, auto_now=False)
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True,
                                   related_name='%(app_label)s_%(class)s_created_by')
    updated_at = models.DateTimeField(auto_now_add=False, auto_now=True)
    updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
                                   related_name='%(app_label)s_%(class)s_updated_by')
Run Code Online (Sandbox Code Playgroud)

update_at字段也在创建时使用值完成,而不是为null.我希望只有在第一次保存/创建之后才有值.

难道我做错了什么 ?

wen*_*isa 6

在Django中,你必须auto_nowauto_now_add两者.

来自文档:

DateField.auto_now

每次保存对象时自动将字段设置为现在.(这意味着它也是第一次创建时)

DateField.auto_now_add

首次创建对象时自动将字段设置为现在.

编辑:

如果你希望你的updated_at领域是null第一次创建对象时,你可以简单地通过null=True一起与auto_now=TrueDateTimeField:

class MetaData(models.Model):
    # ...
    updated_at = models.DateTimeField(auto_now=True, null=True)
    # ...
Run Code Online (Sandbox Code Playgroud)

  • @wencakisa您确定“ auto_now = True,null = True”有效吗?刚刚在Postgres DB上测试了它,但是没有。我也看不到在Postgress上如何实现 (2认同)
  • @zoran,正如您已经指出的,我还确认“updated_at = models.DateTimeField(auto_now=True, null=True)”确实**不(!)**工作。每次保存对象时(包括创建记录时)都会设置它。注意:使用 django 3.0.4 进行测试 (2认同)