Исходя из настроек вашей модели, я думаю, что проще всего было бы изменить поле даты на:
date = models.DateTimeField(auto_now=True)
, которое должно выполнить то, что вы ищете, и вам даже не нужно исключать егоот админа это исключено по умолчанию.Если у вас есть auto_now=True
, это будет действовать как «время последнего обновления».Если у вас есть auto_now_add=True
, это будет действовать как отметка времени создания.
Есть несколько других способов достижения вашей цели, если ваш вариант использования более сложен, чем простое поле автоматической даты.
Переопределите метод сохранения модели, чтобы ввести значение.
class Message(models.Model):
title=models.CharField(max_length=100)
date = models.DateTimeField(editable=False)
def save(*args, **kwargs):
self.date = datetime.datetime.now()
super(Message, self).save(*args, **kwargs)
То, что вы пытаетесь сделать с Администратором модели, не совсем работает, потому что по умолчанию django только передает поля формы обратно в экземпляр моделиесли поля включены.Я думаю, что это может быть так, что форма модели не пытается присвоить модели произвольные атрибуты.Правильный способ сделать это - установить значение экземпляра в методе сохранения вашей формы.
class MessageAdminForm(forms.ModelForm):
def save(*args, **kwargs):
self.instance.date = datetime.now()
return super(MessageAdminForm, self).save(*args, **kwargs)