Django datetime未验证正确

发布于 2021-01-29 16:39:13

我正在使用HTML5datetime-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',
        })

    }

我一直无法通过表单验证,这导致我拔头发。这是文档页面,显示它应该可以工作,但是好像我缺少什么?

编辑说明:

该错误消息是两个startend与它的Enter a valid date/time

关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    误解:

    引用文档

    窗口小部件不应与表单字段混淆。表单字段处理输入验证的逻辑,并直接在模板中使用。窗口小部件处理HTML表单输入元素在网页上的呈现以及原始提交数据的提取。

    小部件对验证没有影响。您为小部件提供了格式参数,但这并不意味着表单字段验证将使用它-它仅设置显示小部件内容的初始格式:

    format :将显示该字段的初始值的格式。


    解决方案

    两种选择:

    • forms.DateTimeField通过传递input_formats参数,为表单字段()提供您要使用的日期时间格式
      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')
      )
      

    这需要针对每个表单字段(可能甚至扩展其小部件)进行。您在这里所做的实际上是覆盖设置(请参阅下一点)。

    • 将日期时间格式添加到设置中作为第一项。这将全局应用于所有使用该设置的表单域和窗口小部件。


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看