首页 > 解决方案 > 如何在 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'

我是否必须在我的模型的时间域中放置选择,或者有没有办法在表单中定义它?

标签: django

解决方案


模型:

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。

额外:如果允许 None 将模型更改为:

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

推荐阅读