首页 > 解决方案 > Django 模型中 TimeField 的半小时选择字段

问题描述

我希望以用户可以选择半小时选择小时的形式进行字段选择。我有这个模型和这个TimeField

class Sample:
   start_time = models.TimeField(choices=global_vars.TIME_MAP_HALF_HOURS_CHOICES,)

我想向客户展示半小时的时间。这是我的选择:

TIME_MAP_HALF_HOURS_CHOICES = (
    (datetime.time(00, 00, 00), '00:00'),
    (datetime.time(00, 30, 00), '00:30'),
    (datetime.time(1, 00, 00), '01:00'),
    (datetime.time(1, 30, 00), '01:30'),
    (datetime.time(2, 00, 00), '02:00'),
    (datetime.time(2, 30, 00), '02:30'),
    (datetime.time(3, 00, 00), '03:00'),
    (datetime.time(3, 30, 00), '03:30'),
    (datetime.time(4, 00, 00), '04:00'),
    (datetime.time(4, 30, 00), '04:30'),
    (datetime.time(5, 00, 00), '05:00'),
    (datetime.time(5, 30, 00), '05:30'),
    (datetime.time(6, 00, 00), '06:00'),
    (datetime.time(6, 30, 00), '06:30'),
    (datetime.time(7, 00, 00), '07:00'),
    (datetime.time(7, 30, 00), '07:30'),
    (datetime.time(8, 00, 00), '08:00'),
    (datetime.time(8, 30, 00), '08:30'),
    (datetime.time(9, 00, 00), '09:00'),
    (datetime.time(9, 30, 00), '09:30'),
    (datetime.time(10, 00, 00), '10:00'),
    (datetime.time(10, 30, 00), '10:30'),
    (datetime.time(11, 00, 00), '11:00'),
    (datetime.time(11, 30, 00), '11:30'),
    (datetime.time(12, 00, 00), '12:00'),
)

但是当我想保存对象时,表单无法验证并引发错误:Choose a valid option. 如何解决此错误‌?

标签: pythondjangodjango-modelsdjango-forms

解决方案


因为在模型中而不是在模型TimeField中设置选择更可取。Form

在使用自定义小部件(而不是)在表单中设置时间选择时检查此答案。Selectforms.TimeField

此外, format ofTIME_MAP_HALF_HOURS_CHOICES建议将其与forms字段选择一起使用(因为它包含value-representation元组),而不是与model字段选择(使用key-value元组)一起使用。这可能会导致错误。此外,时间表示似乎不是模型关注的问题 - 它可能具有允许的 datetime.time 对象列表,但如何表示这些值 - 视图和表单可以更好地决定。


推荐阅读