我正在使用HTML5 datetime-local
输入类型来尝试将一些日期时间数据输入数据库。
ModelForm
class Meta:
如下所示:
class Meta:
model = ScheduleEntry
fields = ['calendar', 'title', 'start', 'end', 'assets', 'users']
widgets = {
'calendar': forms.Select(attrs={
'class': 'fom-control chosen-select'
}),
'title': forms.TextInput(attrs={
'class': 'form-control'
}),
'start': forms.DateTimeInput(attrs={
'type':'datetime-local',
'class':'form-control'
}, format='%Y-%m-%dT%H:%M'),
'end': forms.DateTimeInput(attrs={
'type': 'datetime-local',
'class': 'form-control'
}, format='%Y-%m-%dT%H:%M'),
'assets': forms.SelectMultiple(attrs={
'class': 'form-control chosen-select'
}),
'users': forms.SelectMultiple(attrs={
'class': 'form-control chosen-select',
})
}
我一直无法通过表单验证,这导致我不敢理{。This is文档页面显示该表单应该可以正常工作,但看起来好像我遗漏了一些东西?
编辑说明:
该错误消息是针对start
和end
的,它是Enter a valid date/time
答案 0 :(得分:1)
引用docs:
窗口小部件不应与表单字段混淆。表单字段处理输入验证的逻辑,并直接在模板中使用。窗口小部件处理HTML表单输入元素在网页上的呈现以及原始提交数据的提取。
小部件对验证没有影响。您为窗口小部件指定了格式参数,但这并不意味着表单字段验证将使用它-它仅设置窗口小部件内容的原始格式:
格式:此字段的初始值的显示格式。
两个选项:
通过传递input_formats
参数为表单字段(forms.DateTimeField
)提供您要使用的日期时间格式
class MyIdealDateForm(forms.ModelForm):
start = forms.DateTimeField(
input_formats = ['%Y-%m-%dT%H:%M'],
widget = forms.DateTimeInput(
attrs={
'type': 'datetime-local',
'class': 'form-control'},
format='%Y-%m-%dT%H:%M')
)
这需要为每个表单字段(可能甚至是其窗口小部件)进行扩展。您在这里所做的是有效地覆盖设置(请参阅下一点)。
将日期时间格式添加到settings作为第一项。这将全局应用于所有使用该设置的表单域和窗口小部件。
答案 1 :(得分:0)
您只是有错字。在类值中使其成为“ form”而不是“ fom”。
“日历”:forms.Select(attrs = { 'class':'fom-control selected-select' })
答案 2 :(得分:0)
也许您需要import datetime
来确保它是python的有效日期/时间格式,here才能看到一个道歉。