Django как изменить дату создания

У нас есть базовая модель, которая устанавливает созданное и измененное поле:

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

Мы используем этот класс для расширения наших моделей:

class Event(BaseModel):

Есть ли способ отменить дату создания при создании новых событий?

Это урезанная версия нашего кода. В полезной нагрузке запроса мы отправляем массив объектов событий, содержащий метку времени создания. После добавления объектов в базу данных свойство created устанавливается в now, а не в значение из полезной нагрузки.

Я хотел бы по-прежнему расширяться от BaseModel, поскольку другие области кода могут не устанавливать явно созданное значение, и в этом случае оно должно быть по умолчанию равно now.

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

Вы можете переопределить поле created для вашей Event модели с помощью:

from django.utils.timezone import now

class Event(BaseModel):
    created = models.DateTimeField(default=now)

Если вы не хотите, чтобы это отображалось для ModelForms и ModelAdmins по умолчанию, вы можете использовать editable=False [Django-doc]:

from django.utils.timezone import now

class Event(BaseModel):
    created = models.DateTimeField(default=now, editable=False)
Вернуться на верх