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не включен вyyyContact.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.