如何在Django表单中向时间字段添加选择?

时间:2018-07-04 00:20:24

标签: django

在我的一个模型中,我有以下内容:

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'

我是否必须在模型的时域中放置选择,或者是否可以用表格来定义它?

1 个答案:

答案 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)]