Django 如何覆盖创建日期

Django how to over ride created date

我们有一个设置创建和修改字段的基础模型:

class BaseModel(models.Model):
    created = models.DateTimeField(_('created'), auto_now_add=True)
    modified = models.DateTimeField(_('modified'), auto_now=True)
    ... other default properties

    class Meta:
        abstract = True

我们使用这个 class 来扩展我们的模型:

class Event(BaseModel):

有没有办法在创建新事件时覆盖创建日期?

这是我们代码的精简版。我们正在发送一个事件对象数组,其中包含我们请求有效负载中创建的时间戳。将对象添加到数据库后,创建的 属性 设置为现在,而不是有效负载中的值。

我仍然希望从 BaseModel 扩展,因为代码的其他区域可能没有明确设置创建的值,在这种情况下,它应该默认为现在。

events = []
for e in payload['events']:
    event = Event(
       created=datetime.datetime.fromisoformat(e['created'])
       name='foo'
    )
    events.append(event)
Event.objects.bulk_create(events)

您可以使用以下方法覆盖 Event 模型的 created 字段:

from django.utils.timezone import <strong>now</strong>

class Event(BaseModel):
    created = models.DateTimeField(<strong>default=now</strong>)

如果您不希望它默认显示 ModelForm 秒和 ModelAdmin 秒,您可以使用 editable=False [Django-doc]:

from django.utils.timezone import <strong>now</strong>

class Event(BaseModel):
    created = models.DateTimeField(default=now, <strong>editable=False</strong>)