Mam model z polem daty i godziny:
date = models.DateField(_("Date"), default=datetime.now())
Kiedy sprawdzam aplikację we wbudowanym panelu administracyjnym django, DateField
dołączony jest również czas, więc jeśli spróbujesz ją zapisać, zwracany jest błąd. Jak ustawić domyślną tylko datę? (też datetime.today()
nie działa)
źródło
_("Date")
robisz?Twoim błędem jest użycie
datetime
modułu zamiastdate
modułu. Miałeś zamiar to zrobić:from datetime import date date = models.DateField(_("Date"), default=date.today)
Jeśli chcesz uchwycić tylko aktualną datę, właściwym sposobem na to jest użycie
auto_now_add
parametru:date = models.DateField(_("Date"), auto_now_add=True)
Jednak dokumentacja modelfield wyraźnie to stwierdza
auto_now_add
i zawszeauto_now
będzie używać bieżącej daty i nie jest wartością domyślną, którą można zastąpić.źródło
date = models.DateTimeField(default=datetime.now, blank=True)
źródło
Myślę, że lepszym sposobem rozwiązania tego problemu byłoby użycie wywoływanej daty i godziny:
from datetime import datetime date = models.DateField(default=datetime.now)
Zwróć uwagę, że nie użyto nawiasów. Jeśli użyłeś nawiasów, wywołałbyś
now()
funkcję tylko raz (podczas tworzenia modelu). Zamiast tego przekazujesz wywoływalny argument jako argument, który jest wywoływany za każdym razem, gdy tworzona jest instancja modelu.Podziękowania dla Django Musings . Użyłem go i działa dobrze.
źródło
To powinno załatwić sprawę:
models.DateTimeField(_("Date"), auto_now_add = True)
źródło
Możesz również użyć
lambda
. Przydatne, jeśli używasz django.utils.timezone.nowdate = models.DateField(_("Date"), default=lambda: now().date())
źródło
Note that lambdas cannot be used for field options like default because they cannot be serialized by migrations. See that documentation for other caveats.