【发布时间】:2015-01-23 17:51:01
【问题描述】:
我以这种方式创建了一个 ModelForm。
class Mant(forms.Modelform):
start_date=forms.CharField()
stop_date=forms.CharField()
def clean_start_date(self):
tz=self.request.session.get('timezone','UTC')
data=self.cleaned_data['start_date']
try:
date_parsed=arrow.get(data,'YYYY-MM-DD HH:mm').replace(tzinfo=tz)
except ParserError as e:
raise forms.ValidationError("invalid format")
return date_parsed.format('YYYY-MM-DD HH:mm:ssZZ')
def clean_stop_date(self):
tz=self.request.session.get('timezone','UTC')
data=self.cleaned_data['stop_date']
try:
date_parsed=arrow.get(data,'YYYY-MM-DD HH:mm').replace(tzinfo=tz)
except ParserError as e:
raise forms.ValidationError("invalid format")
return date_parsed.format('YYYY-MM-DD HH:mm:ssZZ')
表格效果很好。验证当前日期和所有。但我的问题是,当解析日期(或我添加的任何其他引发错误的东西)出现问题时,该字段为空,用户需要重新选择日期。
每次我在 django 中看到正常的验证错误时,用户填写的字段都会返回,以便用户进行更正。但在我的情况下,当 clean_field 被替换时,用户填写的值消失了。 有办法解决这个问题吗?
看起来如果第一个元素引发异常,验证将完全停止,并且所有其他错误都不会返回并且它们的字段被清空:(
【问题讨论】:
-
将错误字符串添加到 ValidationError 消息中,或者更好的是,重新引发错误以查看调试时数据出了什么问题。
-
加薪效果很好。我的问题是该字段为空(并且 clean_
接下来的每个字段也为空。如果字段为空,就像 raise 停止所有清理一样。但只有带有 clean_ 方法的字段. -
请粘贴完整的提升消息,如果它工作正常。
-
我没有收到任何错误消息。我得到的只是 ParserError 的另一个 raise as e: 现在我像这样连接它 forms.ValidationError(["invalid format ",e]) 其中 e 是错误的表示。
-
我相信我不太了解您的请愿书。反正。我添加了一个“清除”方法,并在其中添加了 self.add_error('fecha_inicio', "Error") 并且无论在任何自定义 clean_
中的输入,我添加的返回始终为空。
标签: python django forms validation