2009-08-06 161 views
8

問候, 我想實現只包含HH:MM(即16:46)格式的TimeField模型,我知道可以格式化一個常規的Python時間對象,但我迷路了關於如何使用Django進行管理。Django TimeField模型沒有秒

乾杯

回答

6

DateTime fields永遠也存儲秒;但是,您可以輕鬆地告訴模板只顯示小時和分鐘,用time過濾器:

{{ value|time:"H:M" }} 

其中「值」是包含日期時間字段變量。

當然,你也可以使用其他技巧,比如在保存的時候從場上切出秒數;它需要只是一個小變化在視圖中的代碼處理的形式,做這樣的事情:

if form.is_valid(): 
    instance = form.save(commit=False) 
    instance.nosecs = instance.nosecs.strptime(instance.nosecs.strftime("%H:%M"), "%H:%M") 
    instance.save() 

(注:這是一個醜陋的和未經測試的代碼,只是爲了讓這個想法)

最後,您應該注意到管理員仍然會顯示該字段中的秒數。
儘管如此,它應該不是一個大問題,因爲管理員只能被一些可以被指示不使用該部分域的用戶使用。
如果您還想修補管理員,您仍然可以將自己的窗口小部件分配給窗體,從而讓管理員使用它。當然,這意味着需要額外的努力。

+0

{{值|時間: 「H:我」}}爲我工作。 – GvS 2012-04-15 17:05:58

+1

在Django基於類的視圖的表單中,設置TIME_INPUT_FORMATS的設置適用於我。 https://docs.djangoproject.com/zh/dev/ref/settings/#time-input-formats – maciek 2015-01-08 20:18:40

+0

@maciek:那對我不起作用。在'settings.py'中設置'TIME_INPUT_FORMATS = [ '%H:%M', ]還不夠。我不得不指定小部件。 – SaeX 2015-10-20 12:29:23

3

所以我覺得提出和接受的解決方案不是最佳的,因爲有:

datetime.widget = forms.SplitDateTimeWidget(time_format=('%H:%M')) 

對於我來說,一個SplitDateTimeField但只將其更改爲TimeWidget。

希望它可以幫助其他人。

4

Django小部件可以用來輕鬆實現。

from django import forms 

class timeSlotForm(forms.Form): 
    from_time = forms.TimeField(widget=forms.TimeInput(format='%H:%M')) 
2

TimeField模型

在模板

是否顯示

{{ value|time:"H:i" }} 


是不是顯示

{{ value|time:"H:M" }} 

的Django 1.4.1

1

對於ModelForm,可以很容易地添加插件這樣的,以避免被示出的秒(只顯示爲hh:mm):

class MyCreateForm(forms.ModelForm): 

    class Meta: 
     model = MyModel 
     fields = ('time_in', 'time_out',) 
     widgets = { 
      'time_in': forms.TimeInput(format='%H:%M'), 
      'time_out': forms.TimeInput(format='%H:%M'), 
     }