2012-07-08 12 views
6

Modelowałem klasę o nazwie ConversationHistory. Ilekroć tworzona jest instancja, chcę ustawić aktualną datę i aktualny czas.Jak modelować TimeField w Django?

class ConversationHistory(models.Model): 
    contact_date  = models.DateField(_(u"Conversation Date"),  blank=True) 
    contact_time  = models.DateTimeField(_(u"Conversation Time"), blank=True) 

    def __init__(self, *args, **kwargs): 
     super(ConversationHistory, self).__init__(*args, **kwargs) 
     self.contact_date = datetime.datetime.now() 
     self.contact_time = datetime.datetime.now() 

Chodzi o to, że użytkownik może później dostosowywać datę i godzinę jako dwa różne pola.

Jestem teraz trochę zagubiony, jak zrobić pole czasu tylko, aby pokazać i zaakceptować czas, a nie datę i godzinę. Wiem, że nie można mieć pola czasowego bez datetime, ale w jaki sposób mogę pokazać tylko czas w formularzu?

+4

Jest [TimeField] (https://docs.djangoproject.com/en/dev/ref/models/fields/#timefield) –

+1

w formularzu powinny być w stanie sformatować pola jak [ contact_time.strftime ("% H:% M")] (http://docs.python.org/library/time.html#time.strftime) –

+0

@ César tak, by to zrobić. :) Jeszcze jedna rzecz, aby usunąć sekundy, muszę to zrobić w deklaracji widgetu formularza? – Houman

Odpowiedz

10

Jeśli chcesz tylko czas, TimeField jest to, czego potrzebujesz:

class ConversationHistory(models.Model): 
    contact_date = models.DateField(_(u"Conversation Date"), blank=True) 
    contact_time = models.TimeField(_(u"Conversation Time"), blank=True) 

Można skorzystać z opcji auto_now_add:

klasa TimeField ([auto_now = False, auto_now_add = False, ** options])

Czas reprezentowany w języku Python przez instancję datetime.time. Akceptuje takie same opcje automatycznej emisji jak DateField.

Jeśli użyjesz auto_now_add, automatycznie ustawi to pole na teraz, gdy obiekt zostanie po raz pierwszy utworzony.

class ConversationHistory(models.Model): 
    contact_date = models.DateField(_(u"Conversation Date"), auto_now_add=True, blank=True) 
    contact_time = models.TimeField(_(u"Conversation Time"), auto_now_add=True, blank=True) 
+0

To jest bardzo zgrabne z auto_now_add. To znaczy, że nie muszę już robić tego ręcznie w ctor? nice – Houman

+1

Chyba powinieneś używać default = datetime.datetime.now zamiast auto_now_add, problem polega na tym, że nie możesz przesłonić auto_now_add – armonge

+0

Po prostu zdałem sobie sprawę, że nie mogę nawet mieć ustawienia w konstruktorze modelu. Ponieważ nawet edycja pozycji zawsze pokazuje aktualną datę i godzinę. Muszę ustawić to w widoku po utworzeniu tylko nowej instancji. – Houman

Powiązane problemy