我正在向我的 Django 应用程序中的表单和自定义字段添加自定义验证。我希望能够在触发错误时修改字段的值。例如,如果出现错误,应重新显示表单,并使用 clean() 更正的字段值和错误消息“数据已在下面更正。再次单击保存以确认这些更改是否正常”
我试过像这样在cleaned_data []中返回修改后的数据,但它不起作用。它正确显示错误,但当重新显示表单时,字段值不会更新为更正的 HTML。
class T34AtividadeForm(ModelForm):
def clean(self):
# Return cleaned html
error,html = fix_imgs(cleaned_data.get("a34_descricao"))
if error:
msg = u'Data has been corrected below. Click save again to confirm if these changes are OK';
self._errors['a34_descricao'] = ErrorList([msg])
# This doesn't work
cleaned_data["a34_descricao"] = html
# This doesn't work either
self.a34_descricao = html
return cleaned_data
我也想对字段做同样的事情,但由于错误是由异常触发的,我没有机会返回更正的值。与表单 clean() 方法一样,错误显示正确,但值没有更新。
class HTMLField(CharField):
widget = HTMLTextarea
def clean(self, value):
value = super(HTMLField,self).clean(value)
error,html = fix_imgs(value)
if error:
# This doesn't work
self.value = html
raise forms.ValidationError(u'Data has been corrected below. Click save again to confirm if these changes are OK.')
return html