के दौरान एक Django फॉर्म फ़ील्ड का मान संशोधित करें मैं अपने Django ऐप में अपने रूपों और कस्टम फ़ील्ड में कस्टम सत्यापन जोड़ रहा हूं। त्रुटि को ट्रिगर करते समय मैं किसी फ़ील्ड के मान को संशोधित करने में सक्षम होना चाहता हूं। उदाहरण के लिए, यदि कोई त्रुटि है, तो फ़ॉर्म को साफ() द्वारा संशोधित फ़ील्ड मान के साथ फिर से चलाया जाना चाहिए और एक त्रुटि संदेश "डेटा को नीचे सही किया गया है। यह पुष्टि करने के लिए फिर से सहेजें पर क्लिक करें कि ये परिवर्तन ठीक हैं या नहीं"स्वच्छ()
I संशोधित डेटा को 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
मैं भी एक क्षेत्र के साथ एक ही बात करना चाहते हैं, लेकिन जब से त्रुटियों अपवाद द्वारा ट्रिगर कर रहे हैं, मैं ठीक किया मान देने के लिए एक मौका नहीं मिलता है। फॉर्म साफ़() विधि की तरह, त्रुटि सही ढंग से प्रदर्शित होती है, लेकिन मान अपडेट नहीं होता है।
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
यह काम करता है, लेकिन यह अनियंत्रित है और यह सीधे QueryDict ऑब्जेक्ट को संशोधित करने के लिए बदसूरत लगता है। इसके अतिरिक्त, मुझे केवल पढ़ने के लिए QueryDict को संशोधित करने के लिए एक सहायक कार्य लिखना पड़ा .... – user27478
हाँ सही है लेकिन ऐसा करने का कोई आधिकारिक तरीका नहीं है। – user51463
@ उपयोगकर्ता 27478: क्या आप अपना समाधान पोस्ट कर सकते हैं? – Don