2012-07-08 22 views
6

私はConversationHistoryというクラスをモデル化しました。インスタンスが作成されるたびに、現在の日付と現在の時刻を設定したいと思います。DjangoでTimeFieldをモデル化するには?

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() 

アイデアは、ユーザーが後でまだ2つの異なるフィールドとして日付と時刻を調整することができるということです。

私は時間とフィールドを時間と時間ではなく、表示して受け入れる方法を少し失っています。私は日時のない時間フィールドを持つことはできませんが、その後、どのようにフォームに時間だけを表示するのでしょうか?

+4

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

+1

はあなたのようなフィールドをフォーマットすることができるはずフォームです[ contact_time.strftime( "%H:%M")](http://docs.python.org/library/time.html#time.strftime) –

+0

@Césarはいそうです。 :)ちょうど最後のものは、秒を削除するために、私はフォームのウィジェットの宣言でそれを行う必要がありますか? – Houman

答えて

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、 **オプション])

時間は、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

Thats very neat with auto_now_add。それは私がもうctorで手動で行う必要はないということですか? nice – Houman

+1

私はあなたがauto_now_addの代わりにdefault = datetime.datetime.nowを使用しなければならないことを知りました。問題は、auto_now_addを上書きすることができないということです。 – armonge

+0

私はモデルのコンストラクタ内に設定することさえできません。アイテムを編集しても常に現在の日付と時刻が表示されるためです。新しいインスタンスを作成するときに、ビュー内でこれを設定する必要があります。 – Houman

関連する問題