2009-03-17 13 views
18

के दौरान एक 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 

उत्तर

6

साफ विधि आपके प्रपत्र एक मॉडल के लिए एक बेहतर दृष्टिकोण के रूप में किया जाता है तो वह मान है जो प्रदर्शित किया जाता

+6

यह काम करता है, लेकिन यह अनियंत्रित है और यह सीधे QueryDict ऑब्जेक्ट को संशोधित करने के लिए बदसूरत लगता है। इसके अतिरिक्त, मुझे केवल पढ़ने के लिए QueryDict को संशोधित करने के लिए एक सहायक कार्य लिखना पड़ा .... – user27478

+1

हाँ सही है लेकिन ऐसा करने का कोई आधिकारिक तरीका नहीं है। – user51463

+3

@ उपयोगकर्ता 27478: क्या आप अपना समाधान पोस्ट कर सकते हैं? – Don

-1

बदलने के लिए परिवर्तन स्वयं डेटा एक उदाहरण प्राप्त करने के लिए हो सकता है और है कि डेटा को सुधार के बजाय होगा:

inst = my_form.save(commit=False) 
if inst.a34_stuff is None: #or incorrect 
    inst.a34_stuff = "corrected" 
    request.user.message_set.create(message = "Error corrected") 
    return HttpResponseRedirect(reverse('your_url_name', 
      args=[]) 

पीएस: मुझे यकीन नहीं है कि यह वास्तव में काम करेगा या नहीं ... सुनिश्चित नहीं है कि फॉर्म पिकअप परिवर्तन करेगा या नहीं।

+0

के साथ काम नहीं करता है यह काम नहीं कर रहा है! – digz6666

0

इस तरह से मैं कोशिश की है और मेरे लिए काम करता है:

self.data["a34_stuff"] = "html" 

यह काम करता है: स्वच्छ में मान अपडेट

inst = my_form.save(commit=False) 
if not inst.a34_stuff: # or incorrect 
    inst.data["a34_stuff"] = "corrected" 
+1

अगर कुछ सत्यापन त्रुटि है तो यह काम नहीं करता है! – digz6666

3

रास्ता() अद्यतन फ़ॉर्म का डेटा शब्दकोश में मूल्य है पक्का।

+1

यह Django 2.0 – Daniel

+0

के साथ काम नहीं करता है, यह 1.11 में भी नहीं था! –

संबंधित मुद्दे