django - 如何在 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'
我是否必须在我的模型的时间域中放置选择,或者有没有办法在表单中定义它?
解决方案
模型:
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)]
推荐阅读
- angular - Angular FormControl、patchValue 和 mat-selection-list
- python - Pandas 条件 Vlookup 循环
- r - 创建所有交叉组合,尊重列层次结构
- java - 在线计时器,永远不会被破坏,应该保持离线运行
- docker - 在 docker 中使用 concourse 构建本地 maven 项目
- ios - 从 UIHostingViewController 呈现 UIViewController
- jquery - Laravel 8 Typeahead 上的 500 内部服务器错误
- reactjs - react-chartjs-2 中水平条的颜色未显示。仅在竖条上显示
- c++ - 服务器端的 gRPC 超时
- firebase - 为什么我无法在颤动中查看此列表视图?