作为一个练习,我正在尝试为 24 小时制创建一个自定义 django 小部件。小部件将是一个 MultiWidget - 每个字段的选择框。
我正在尝试在线关注文档(有点稀疏)并查看 Pro Django 书籍,但我似乎无法弄清楚。我在正确的轨道上吗?我可以保存表单中的数据,但是当我预填充表单时,表单没有以前的值。
似乎问题在于 decompress() 方法的“值”参数始终为空,所以我没有什么要解释的。
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())