Django表单设置时间默认值后输入时间出现‘请选择有效值’错误
Django TimeField表单验证错误排查
我创建了如下Django表单:
class SearchTimeSlotsForm(forms.Form): available_from = forms.TimeField(widget=TimeInput(attrs={'class': 'unbold-form'}), initial=time(0)) available_till = forms.TimeField(widget=TimeInput(attrs={'class': 'unbold-form'}), initial=time(23,59,59))
如你所见,我为表单设置了默认值,但输入时间时却收到错误提示「Please select a valid value」(请选择有效值)。
错误提示截图:
需要说明的是,用户可输入任意时间,该问题与默认值或格式无关,本不应出现此错误。有人能告诉我错误原因吗?
相关代码见GitHub仓库:room_slot_booking项目的hotel/forms.py文件
错误原因及解决方法
核心问题是浏览器提交的时间格式与Django TimeField默认验证格式不匹配:
- Django的TimeField默认仅支持
HH:MM或HH:MM:SS的24小时制格式; - 若浏览器采用12小时制输入(带AM/PM标识)或其他非标准格式,Django会直接判定为无效值。
具体解决步骤:
- 显式指定兼容的输入格式,覆盖TimeField默认验证规则,同时支持24小时制和12小时制:
from django import forms from django.utils.timezone import time class SearchTimeSlotsForm(forms.Form): available_from = forms.TimeField( widget=forms.TimeInput(attrs={'class': 'unbold-form'}), initial=time(0), # 支持多种时间格式:24小时制(带/不带秒)、12小时制(带/不带秒+AM/PM) input_formats=['%H:%M', '%H:%M:%S', '%I:%M %p', '%I:%M:%S %p'] ) available_till = forms.TimeField( widget=forms.TimeInput(attrs={'class': 'unbold-form'}), initial=time(23,59,59), input_formats=['%H:%M', '%H:%M:%S', '%I:%M %p', '%I:%M:%S %p'] )
- 排查前端提交的实际数据:在视图函数中打印
request.POST,查看提交的时间值具体格式,再针对性调整input_formats中的规则。 - 若使用了第三方时间输入插件,确认插件输出的时间格式与Django验证规则匹配。
内容的提问来源于stack exchange,提问作者Anshul Gupta
相关产品推荐
相关产品推荐

