python - Django 日期时间不验证正确

标签 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

最佳答案

误解:

引用docs :

Widgets should not be confused with the form fields. Form fields deal with the logic of input validation and are used directly in templates. Widgets deal with rendering of HTML form input elements on the web page and extraction of raw submitted data.

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

format: The format in which this field’s initial value will be displayed.


解决方案

两种选择:

  • 通过传递 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作为第一项。这将全局应用于所有使用该设置的表单域和小部件。

关于python - Django 日期时间不验证正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53180600/

相关文章:

python - 我可以使用哪些 Python 工具来连接网站的 API?

python - 如何在模板中显示计算数据

python - Django 休息框架 : Pagination w/ListModelMixin

javascript - date() 函数在 Safari 和 Firefox 中返回无效日期

Python - 给定一个时区感知日期时间对象,我如何获得时区天真的 UTC 日期时间对象?

c# - IronPython 中的 DateTime.Now.AddSeconds 等价物

python - vscode-python pipelinenv 自动运行行为是否存在安全风险?

python - 如何使用Python获取Excel工作簿的路径

Python - 有没有办法自动化这个? <code>itertools.product</code>

javascript - Django 多个图像无法上传