2013-04-16 9 views
15

Mam model wydarzeń, które prawie zawsze zaczynają się o 22.00, ale czasami mogą zaczynać się wcześniej/później. Aby ułatwić pracę administratorowi, chciałbym, aby czas był domyślny do 22.00, ale w razie potrzeby można go zmienić; data będzie musiała być ustawiona niezależnie, więc nie potrzebuje wartości domyślnej, ale najlepiej domyślnie bieżąca data.Czy mogę ustawić konkretny domyślny czas dla pola datetime Django?

Zdaję sobie sprawę, że mogę użyć datetime.now, aby osiągnąć ten drugi, ale czy jest możliwe (i jak) ustawić czas na określoną wartość domyślną?

Aktualizacja: otrzymuję odpowiedzi szybciej niż mogę określić, który (e) robi to, co próbuję osiągnąć ... Prawdopodobnie powinienem być dalej wraz z aplikacją, zanim zapytałem. Dzięki za pomoc w międzyczasie!

+0

Dostaję 'Błąd typu: __init __() dostał nieoczekiwaną argumentu słowa kluczowego 'default''. Jakieś pomysły? Korzystanie z formularzy. Forma zamiast formularza modelu. forms.TimeField (domyślnie = dt.time (16, 0), widget = forms.TimeInput) –

Odpowiedz

-1

Coś takiego?

import datetime 

dt = datetime.now() 
dt.hour = 22 
dt.minute = 0 
dt.second = 0 

Trudno być bardziej konkretnym bez kontekstu.

+0

Nie jestem pewien, jaki kontekst mógłbym podać; Chcę tylko, żeby osoba wprowadzająca datę nie musiała jej zmieniać do godziny 10:00 za każdym razem, gdy dodawali nowe wydarzenie (ale nadal mają opcję zmiany). Rozwiązanie jest wprawdzie proste, jeśli takie istnieje; wygląda na to, że to może zadziałać. – lisaq

11

z dokumentów Django dla Field.default:

The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.

Więc to zrobić:

from datetime import datetime, timedelta 

def default_start_time(): 
    now = datetime.now() 
    start = now.replace(hour=22, minute=0, second=0, microsecond=0) 
    return start if start > now else start + timedelta(days=1) 

class Something(models.Model): 
    timestamp = models.DateTimeField(default=default_start_time) 
+1

Podoba mi się, jak ten przykład używa "jutro o 22:00", jeśli instancja modelu jest tworzona po godzinie 22:00. – gldnspud

+0

, gdy używasz 'datetime.now()' zamiast 'datetime.now'' teraz' będzie ustaloną datą, kiedy jest ona najpierw oceniana. Co to znaczy? Kiedy twój serwer działa na słabe, z 'datetime.now()' zawsze będzie to data uruchomienia serwera. Dzięki użyciu 'datetime.now' zostanie on dynamicznie oceniony. – Asqiir

+0

jest to możliwe, aby pokazać godziny i minuty wyświetlane na ekranie zamiast pokazywać godziny minut i milisekund. i zamiast używać czasu militarnego, użyj am i pm ... ponieważ z tym, co masz powyżej, pokazuje pełny czas. –

6

w przypadku jesteś zainteresowany do ustawiania wartości domyślnych dla TimeField: https://code.djangoproject.com/ticket/6754

nie:

start = models.TimeField(default='20:00') 

zrobić zamiast:

import datetime 
start = models.TimeField(default=datetime.time(16, 00)) 
+1

Nie wiem, dlaczego chcesz uwzględnić datetime.datetime w 'TimeField'. Lepiej zrobić 'start = models.TimeField (domyślnie = datetime.time (16, 00))' – SaeX

+0

@SaeX ty, naprawiono. –

Powiązane problemy