为了账号安全,请及时绑定邮箱和手机立即绑定

无效的日期 django 表单验证

无效的日期 django 表单验证

四季花海 2022-11-01 15:03:37
我正在学习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>有人能帮我吗
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

"2000-04-16T18:57"不是%d/%m/%Y %H:%M格式,而是%Y-%m-%dT%H:%M格式。在此处检查列表日期格式化程序https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes


查看完整回答
反对 回复 2022-11-01
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

您的小部件格式只显示给客户端,而不是表格。所以您可以尝试添加一个名为 clean_date(self) 的方法来用空格替换“T”,然后返回它。或将您的格式添加到 settings.py 的 DATETIME_INPUT_FORMATS 列表中。



查看完整回答
反对 回复 2022-11-01
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

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

我所做的是:

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

getCopy = request.GET.copy()

之后我转换了来自 GET 的 DATE

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 的可变副本和我的格式化日期:)


查看完整回答
反对 回复 2022-11-01
  • 3 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信