В чем разница между параметрами timezone.now и auto_now_add в поле DateTimeField в моделях Django?

Я пишу свое первое приложение на Django - блог. При создании модели Post меня просят создать publish и созданные поля с импортом timezone.

publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)

Поясняется, что "При использовании auto_now_add дата будет сохранена автоматически при создании объекта" и "timezone.now возвращает текущую дату в формате, учитывающем временные зоны".

Мне кажется, что они оба выполняют одну и ту же задачу. Почему бы не использовать default=timezone.now в обоих полях? В чем разница? Это мой первый вопрос, поэтому заранее извините, если я допустил какие-то ошибки.

Они одинаковы, за исключением одного: auto_now_add=True переопределяет любое начальное значение, переданное вами при создании объекта, тогда как default=timezone.now позволит вам установить собственное, другое значение.

Вы можете прочитать это в документах

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

default=timezone.now означает установку текущего времени по умолчанию при добавлении или изменении поля для модели, которая уже существует, так как в базе данных могут быть записи, и вам нужно указать, что заполнять для этих существующих записей. Спасибо!

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