Django: Когда поле `auto_now` не будет обновляться?
Предположим, у меня есть приложение Django, поддерживаемое Postgres, и в этом приложении у меня есть модель Contact
с DateTimeField
под названием last_updated
. Предположим, что last_updated
имеет auto_now
, установленный на True
.
Я знаю, что есть некоторые обстоятельства, при которых last_updated
не будет обновляться, когда обновляется запись Contact
:
Contact.objects.filter(xxx).update(yyy)
не будет обновлятьlast_updated
, еслиlast_updated
не включен вyyy
Contact.objects.bulk_update(contacts_qs, [zzz])
не будет обновлятьlast_updated
, еслиlast_updated
не включен вzzz
Существуют ли другие способы обновления модифицированных Contact
объектов (кроме прямого доступа к БД), при которых last_updated
не будут обновлены?
Из документации auto_now:
DateField.auto_now
Автоматически устанавливает поле в now при каждом сохранении объекта. Полезно для временных меток "last-modified". Обратите внимание, что всегда используется текущая дата; это не просто значение по умолчанию, которое можно переопределить.
.
Поле автоматически обновляется только при вызове Model.save(). Поле не обновляется при обновлении других полей другими способами, такими как QuerySet.update(), хотя вы можете указать пользовательское значение для поля при таком обновлении.
.
Таким образом, если вы не выполняете немодифицированное сохранение непосредственно из модели, возможно, что поле не будет автоматически сохранено. Вот почему я использую комбинацию триггер/функция Postgres, которая обрабатывает это в базе данных. Также для обработки обновлений данных, поступающих извне Django.