Я добавляю пользовательскую проверку в свои формы и настраиваемые поля в приложении 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