Tôi đang thêm xác thực tùy chỉnh vào biểu mẫu và trường tùy chỉnh trong ứng dụng Django của mình. Tôi muốn có thể sửa đổi giá trị của trường khi kích hoạt lỗi. Ví dụ: nếu có lỗi, biểu mẫu sẽ được hiển thị lại với giá trị trường được sửa bởi clean() và thông báo lỗi "Dữ liệu đã được sửa chữa bên dưới. Nhấp vào lưu lại để xác nhận xem những thay đổi này có được"Sửa đổi giá trị của trường biểu mẫu Django trong suốt()
I đã thử trả về dữ liệu đã sửa đổi trong clean_data [] như thế này nhưng nó không hoạt động. Nó hiển thị lỗi chính xác, nhưng giá trị trường không được cập nhật với HTML đã sửa khi biểu mẫu được hiển thị lại.
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
Tôi cũng muốn làm điều tương tự với trường, nhưng do lỗi được kích hoạt bởi ngoại lệ, tôi không có cơ hội trả về giá trị đã sửa. Giống như phương thức clean() của form, lỗi được hiển thị đúng, nhưng giá trị không được cập nhật.
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
Tác phẩm này, nhưng không có giấy tờ và cảm thấy xấu xí khi sửa đổi đối tượng QueryDict trực tiếp. Ngoài ra, tôi đã phải viết một hàm trợ giúp để sửa đổi QueryDict chỉ đọc .... – user27478
Có quyền nhưng có afaik không có cách chính thức để làm điều này. – user51463
@ user27478: Bạn có thể đăng giải pháp của mình không? – Don