2017-02-14 7 views
0

Учитывая модельauto_now_add поля сведут вход

class Foo(models.Model): 
    bar = models.DateTimeField(auto_now_add=True) 

Когда я

my_foo = Foo.objects.create(bar=yesterday) 

Тогда my_bar.foo не вчера, но в настоящее время. Я должен сделать

my_foo = Foo.objects.create() 
my_foo.bar = yesterday 
my_foo.save() 

Это не использовать, чтобы быть случай, но верно для Django 1.8.17

ответ

1

Из docs:

auto_now и auto_now_add варианты будут всегда используйте дату в часовом поясе по умолчанию на момент создания или обновления. Если вам нужно что-то другое, вы можете просто рассмотреть свой собственный вызываемый по умолчанию или переопределить save() вместо использования auto_now или auto_now_add; или используя DateTimeField вместо DateField и решая, как обрабатывать преобразование с даты и времени на время отображения.

Таким образом, вы должны сделать это вместо

bar = models.DateTimeField(default=date.today) 
+0

Право ... Оглядевшись в Интернете, кажется, что эти kwargs изменили функциональность так много раз, что люди просто рекомендуем не использовать их вообще. Я буду двигаться в сторону переопределения 'save' вместо – Eldamir

+0

@ Eldamir - я не могу найти нигде в документах, которые предполагают, что он когда-либо менялся, эта заметка присутствует даже в [docs for 1.7] (https: //docs.djangoproject .com/ru/1.7/ref/models/fields/# django.db.models.DateField.auto_now_add). Единственная ссылка на него - это [ошибка в версии 1.4] (https://docs.djangoproject.com/ не ан/DEV/релизы/1,4/# Погрузочно-некоторые-незавершенные-светильники-нет-больше-работ) – Sayse