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.

Вернуться на верх