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/