在我的一个模型中,我有以下内容:
time = models.TimeField()
在基于此模型的模型表单中,我希望time
是一个具有多种选择的下拉菜单,因此我尝试了以下操作:
time = forms.TimeField(label="time", choices=[(datetime.time(0, 0), "Midnight"), (datetime.time(12, 0), "Noon")])
我收到以下错误:
TypeError: __init__() got an unexpected keyword argument 'choices'
我是否必须在模型的时域中放置选择,或者是否可以用表格来定义它?
答案 0 :(得分:2)
型号:
import datetime as dt
begin_time = models.TimeField(default=dt.time(00, 00))
表格:
import datetime as dt
HOUR_CHOICES = [(dt.time(hour=x), '{:02d}:00'.format(x)) for x in range(0, 24)]
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
widgets = {'begin_time': forms.Select(choices=HOUR_CHOICES)}
就是这样。结果是向用户显示了24小时的下拉菜单(这样就不会弄乱输入字段,用户也不会输入各种愚蠢的东西),结果是将TimeField直接输入数据库。
附加:如果不允许“无”,则将模型更改为:
begin_time = models.TimeField(null=True, blank=True)
和选择列表:
HOUR_CHOICES = [(None, '------')] + [(dt.time(hour=x), '{:02d}:00'.format(x)) for x in range(0, 24)]