Будь-яке поле з auto_nowнабором атрибутів також буде успадковано editable=Falseі тому не відображатиметься на панелі адміністратора. У минулому вже говорилося про те, як зникнути auto_nowі auto_now_addаргументи, і хоча вони все ще існують, я вважаю, що вам краще просто скористатися спеціальним save()методом .
Отже, щоб зробити цю роботу належним чином, я б рекомендував не використовувати auto_nowабо auto_now_addзамість цього визначити свій власний save()метод, щоб переконатися, що createdвін оновлюється лише якщо idйого не встановлено (наприклад, коли елемент вперше створено), і оновити йогоmodified кожного разу, коли елемент зберігається.
Я вчинив точно так само, як і з іншими проектами, написаними за допомогою Django, і ваш так save()виглядатиме так:
from django.utils import timezone
class User(models.Model):
created = models.DateTimeField(editable=False)
modified = models.DateTimeField()
def save(self, *args, **kwargs):
''' On save, update timestamps '''
if not self.id:
self.created = timezone.now()
self.modified = timezone.now()
return super(User, self).save(*args, **kwargs)
Сподіваюсь, це допомагає!
Редагувати у відповідь на коментарі:
Причина, чому я просто дотримуюсь перевантаження save()і покладаюся на ці аргументи поля, є двоякою:
- Вищезгадані злети і падіння з їх надійністю. Ці аргументи значною мірою залежать від того, як кожен тип баз даних, з яким Django знає, як взаємодіяти з, обробляє поле дати та часу, і, здається, порушується та / або змінюється між кожним випуском. (Я вважаю, що це поштовх для заклику взагалі їх усунути).
- Справа в тому, що вони працюють лише на DateField, DateTimeField та TimeField, і за допомогою цієї методики ви зможете автоматично заповнювати будь-який тип поля кожного разу, коли елемент зберігається.
- Використовуйте
django.utils.timezone.now()порівняно datetime.datetime.now(), тому що це поверне відомості про TZ або наївний datetime.datetimeоб’єкт залежно від settings.USE_TZ.
Щоб вирішити, чому ОП побачила помилку, я точно не знаю, але, схоже created, навіть взагалі не заселяється, незважаючи на те auto_now_add=True. Для мене він виділяється як помилка і підкреслює предмет №1 у моєму маленькому списку вище: auto_nowі auto_now_addв кращому випадку є лущими.