2012-07-08 21 views
6

我建立了一個名爲ConversationHistory的類。無論何時創建實例,我都希望設置當前日期和當前時間。如何在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() 

這個想法是,用戶以後仍然可以將日期和時間調整爲兩個不同的字段。

我現在有點失落如何使時間字段只顯示和接受時間,而不是日期和時間。我認爲它是不可能有沒有日期時間的時間字段,但那麼我將如何只顯示錶單中的時間?

+4

有一個[TimeField(https://docs.djangoproject.com/en/dev/ref/models/fields/#timefield)在窗體 – 2012-07-08 18:40:33

+1

你應該能夠格式化場像[ contact_time.strftime(「%H:%M」)](http://docs.python.org/library/time.html#time.strftime) – 2012-07-08 18:47:50

+0

@César是的,這樣做。 :)最後一件事,爲了消除秒數,我需要在窗體小部件聲明中做到這一點? – Houman 2012-07-08 18:48:59

回答

10

如果你想只有時間,TimeField就是你需要:

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

您可以利用auto_now_add選項:

類TimeField([auto_now =假auto_now_add =假** options])

一段時間,用Python表示一個datetime.time實例。接受與DateField相同的自動填充選項 。

如果您使用的是auto_now_add,則會在首次創建對象時自動將字段設置爲現在。

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

這非常整潔auto_now_add。這意味着我甚至不需要在ctor中手動執行它?不錯 – Houman 2012-07-08 19:23:55

+1

我應該使用默認= datetime.datetime.now而不是auto_now_add,問題是你無法覆蓋auto_now_add – armonge 2012-07-08 20:37:55

+0

我剛纔意識到我甚至不能在模型的構造函數中設置。由於即使編輯項目始終顯示當前的日期和時間。我只需要在創建新實例時在視圖中設置它。 – Houman 2012-07-10 10:34:50