Django datetime未验证正确

时间:2018-11-06 21:52:24

标签: python django datetime datetime-format

我正在使用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文档页面显示该表单应该可以正常工作,但看起来好像我遗漏了一些东西?

编辑说明:

该错误消息是针对startend的,它是Enter a valid date/time

3 个答案:

答案 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才能看到一个道歉。