Django Models auto_now сохраняет то же время, что и auto_now_add

Проблема с моделями в Django. Я добавляю эти 2 поля почти в каждую модель для хранения созданного (auto_now_add=True) и обновленного datetime (auto_now=True).

created_at = models.DateTimeField(auto_now_add=True) 
updated_at = models.DateTimeField(auto_now=True, null=True)

Проблема

Проблема в том, что когда я создаю новый ряд в таблице с помощью Django, поле created_at заполняется текущим временем (что нормально), но поле updated_at также заполняется при первом создании.

Имеет ли это смысл? С точки зрения конечного пользователя, я только создал запись, но никогда не обновлял ее, но в базе данных время обновления также обновляется, поскольку данные вставляются в ряд впервые (это происходит всякий раз, когда вы вставляете новый ряд). Таким образом, когда пользователь просматривает запись, система показывает created_at и updated_at одинаково.

TL;DR: когда вы создаете объект в первый раз, оба created_at и updated_at будут заполнены значениями, в соответствии с созданным вами кодом.

  • auto_now_add будет устанавливать timezone.now() только при создании экземпляра.
  • auto_now будет обновлять поле каждый раз, когда вызывается метод сохранения.

Однако оба варианта функционируют одинаково, вызывая событие обновления поля с помощью timezone.now().

Это означает, что при первом создании объекта оба created_at и updated_at will будут заполнены значениями.

Но в следующий раз, когда вы сохраните этот объект, значение created_at останется прежним, а значение updated_at вызовет значение timezone.now().

Опции auto_now_add, auto_now и default являются взаимоисключающими. Любая комбинация этих опций приведет к ошибке.

Документация Django: https://docs.djangoproject.com/en/4.0/ref/models/fields/

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