代码之家  ›  专栏  ›  技术社区  ›  James

Django使用RangeWidget验证表单

  •  0
  • James  · 技术社区  · 6 年前

    我有一张表格:

    class MyForm(forms.ModelForm):
        class Meta:
            model = MyModel
            fields = ['name', 'description', 'slot',]
    
            widgets = {
                'slot': RangeWidget(forms.DateTimeInput()),
                }
    

    我收到视图中的表格:

    if request.POST:
        form = MyForm(data=request.POST)
        if form.is_valid():
    

    但表单从未经过验证,因为发布的参数包括:

    name: 'TEST', description : 'fsd', slot_0: '2018/05/15 21:00:00', slot_1: '2018/05/15 21:30:00', submit: 'submit'
    

    表单。错误包括:

    Enter a valid date/time.
    

    我假设django会自动为发布的值创建datetime对象的元组,但显然不是这样。如何验证此表单并将其保存到数据库?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ivan    6 年前

    您的日期时间格式不正确。尝试将以下内容添加为 __init__ 表单的方法,以匹配post数据中的格式:

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        for field in self.fields['slot'].fields:
            field.input_formats.append("%Y/%m/%d %H:%M:%S")
    

    另一种解决方案是在发送到服务器之前格式化数据。在这种情况下,您可以发送例如“2018-05-15 21:00:00”,它将与中已经存在的格式相匹配 input_formats 列表