Python django表单验证的日期无效

Python django表单验证的日期无效,python,django,forms,date,Python,Django,Forms,Date,我正在学习Django并构建一个CRUD,但是我的表单验证中出现了一个错误 这是**我创建的表单** class addSignForm(forms.ModelForm): active = forms.CharField(max_length=10) class Meta: model = signs fields = ("id", "active", "action", "date", "expiration_date", "add_by", "user_sign")

我正在学习Django并构建一个CRUD,但是我的表单验证中出现了一个错误

这是**我创建的表单**

class addSignForm(forms.ModelForm):
active = forms.CharField(max_length=10)

class Meta:
    model = signs
    fields = ("id", "active", "action", "date", "expiration_date", "add_by", "user_sign")
    widgets = {
        'date': forms.DateTimeInput(attrs={'type': 'datetime-local'}, format='%Y-%m-%dT%H:%M'),
    }
这是我从请求中收到的日期(也尝试了格式:“%y-%m-%dT%H:%m”

'2000-04-16T18:57'
当我试图:

if (form.is_valid()):
表示这是一个无效表单,并且我键入了一个无效日期

<li>Enter a valid date/time.</li></ul>
  • 输入有效的日期/时间。

  • 有人能帮我吗

    “2000-04-16T18:57”
    不是
    %d/%m/%Y%H:%m
    格式,而是
    %Y-%m-%dT%H:%m
    格式。请检查此处的日期格式化程序不是
    %d/%m/%Y%H:%m
    格式,而是
    %Y-%m-%dT%H:%m
    格式。检查此处列出的日期格式化程序

    您的小部件格式仅为客户端显示,而不是为窗体显示。因此,您可以尝试添加一个名为clean_date(self)的方法,用空格替换“T”,然后返回它。
    或者将您的格式添加到DATETIME\u INPUT\u FORMATS settings.py列表中。

    您的小部件格式只是为客户端显示,而不是为表单显示。因此,您可以尝试添加一个名为clean\u date(self)的方法,用空格替换“T”,然后返回它。
    或者将您的格式添加到DATETIME\u INPUT\u FORMATS list of settings.py。

    我最终设法解决了这个问题,但是我不喜欢这个解决方案,因为它似乎不是最正确的……不过,如果人们遇到同样的问题,我将在这里分享它:)

    我所做的是:

    创建我的GET的副本,使其成为可变的

    getCopy = request.GET.copy()
    
    在那之后,我转换了从GET提交的日期

    ts = time.strptime(request.GET['date'], "%Y-%m-%dT%H:%M")
    getCopy['date'] = time.strftime("%m/%d/%Y", ts)
    

    当我调用我的form.is\u valid而不是传递request.GET时,我传递了带有格式化日期的GET的可变副本:)

    我最终设法解决了这个问题,但是我不喜欢这个解决方案,因为它似乎不是最正确的。。。不过,如果人们遇到同样的问题,我会在这里分享:)

    我所做的是:

    创建我的GET的副本,使其成为可变的

    getCopy = request.GET.copy()
    
    在那之后,我转换了从GET提交的日期

    ts = time.strptime(request.GET['date'], "%Y-%m-%dT%H:%M")
    getCopy['date'] = time.strftime("%m/%d/%Y", ts)
    
    当我调用我的form.is_valid而不是传递request.GET时,我会传递带有格式化日期的GET的可变副本:)