作爲一個練習,我試圖創建一個24小時制的自定義Django小部件。該小部件將是一個MultiWidget - 每個字段的選擇框。自定義django小部件 - 解壓縮()arg沒有填充
我想跟隨在線文檔(有點稀疏),看着專業Django書,但我似乎無法弄清楚。我在正確的軌道上嗎?我可以從表單中保存數據,但是當我預先填充表單時,表單沒有以前的值。
看來問題是,解壓縮()方法的'值'參數總是空的,所以我沒有任何解釋。
from django.forms import widgets
import datetime
class MilitaryTimeWidget(widgets.MultiWidget):
"""
A widget that displays 24 hours time selection.
"""
def __init__(self, attrs=None):
hours = [ (i, "%02d" %(i)) for i in range(0, 24) ]
minutes = [ (i, "%02d" %(i)) for i in range(0, 60) ]
_widgets = (
widgets.Select(attrs=attrs, choices=hours),
widgets.Select(attrs=attrs, choices=minutes),
)
super(MilitaryTimeWidget, self).__init__(_widgets, attrs)
def decompress(self, value):
print "******** %s" %value
if value:
return [int(value.hour), int(value.minute)]
return [None, None]
def value_from_datadict(self, data, files, name):
hour = data.get("%s_0" %name, None)
minute = data.get("%s_1" %name, None)
if hour and minute:
hour = int(hour)
minute = int(minute)
return datetime.time(hour=hour, minute=minute)
return None
在我的形式,我打電話像小部件:
arrival_time = forms.TimeField(label="Arrival Time", required=False, widget=MilitaryTimeWidget())
我不會把它作爲答案,因爲它與你的問題是正交的,但我想不出爲什麼你想要這個UI。這比在文本框中正確解析/驗證的文本輸入框更好/更快/更容易? – 2009-02-12 17:58:34