2012-07-08 32 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