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>)
我们有一个设置创建和修改字段的基础模型:
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>)