【发布时间】:2015-04-20 15:26:09
【问题描述】:
我有一个带有 15 分钟时隙选项的 Django 表单选择字段:
<select id="mytime" name="mytime">
<option value="2:00 PM">2:00 PM</option>
<option value="2:15 PM">2:15 PM</option>
<option value="2:30 PM">2:30 PM</option>
<option value="2:45 PM">2:45 PM</option>
...
我遇到的问题是,当我编辑实例值时,不会自动选择当前时间值,除非我有 24 小时格式的选项值,例如 <option value="14:45:00">14:45:00</option>,因为那是匹配的数据库格式。
views.py
times = []
for i in range(0, 24*4):
times.append((datetime.combine(date.today(), time()) + timedelta(minutes=15) * i).time().strftime("%I:%M %p").lstrip('0'))
form = MyForm(instance=instance,
options=[( choice, choice ) for choice in times])
return ...
forms.py
self.fields['mytime'] = forms.ChoiceField(
required=True,
choices=options,
widget=forms.Select(
attrs={'class': 'myclass',}
))
由于这是一个Select 字段,小部件将不接受format 属性。
有什么办法吗?
如何在我的下拉菜单中选择当前值来实现 AM/PM 格式?
工作代码:
forms.py
def __init__(self, *args, **kwargs):
options = kwargs.pop('options', None)
super(MyForm, self).__init__(*args, **kwargs)
self.fields['mytime'] = forms.ChoiceField(
required=True,
choices=options,
widget=forms.Select(
attrs={'class': 'myclass',}
))
view.py
form = MyForm(request.POST or None, instance=instance,
options=[( choice.strftime("%H:%M:%S"), choice.strftime("%I:%M %p").lstrip('0') ) for choice in times])
【问题讨论】: