2011-03-21 16 views
12

मुझे पता है कि साधारण Django फॉर्म का उपयोग करते समय अपने स्वयं के कस्टम त्रुटि संदेश कैसे सेट करें। लेकिन मौजूदा मॉडल के आधार पर Django फॉर्म के बारे में क्या? "यह फ़ील्ड आवश्यक है" दिखाई देता है तो मैं इस तरह के रूप संदेश बनाने और इसे पोस्ट करने की कोशिश,Django, मॉडल और प्रपत्र: "यह फ़ील्ड आवश्यक है" संदेश

Class MyModel(models.Model): 
    name = models.CharField(max_length='30') 

Class MyForm(forms.ModelForm): 
    Class Meta: 
     model = MyModel 

: निम्नलिखित मॉडल और फार्म पर विचार करें। लेकिन इसे कैसे बदला जाए? बेशक मैं कुछ इस तरह कर सकता है:

Class MyForm(forms.ModelForm): 
    model = forms.CharField(error_messages = {'required': "something..."}) 
    Class Meta: 
     model = MyModel 

लेकिन दस्तावेज़ के अनुसार, MAX_LENGTH विशेषता संरक्षित नहीं किए जाएंगे और मैं प्रपत्र परिभाषा को स्पष्ट रूप से इसे लिखने के लिए की है। मैंने सोचा कि मॉडल फॉर्म का उद्देश्य एक ही कोड को दो बार लिखने से बचाना है। तो पूरे फॉर्म को फिर से लिखने के बिना कस्टम त्रुटि संदेश को बदलने का कुछ आसान तरीका होना चाहिए। असल में यह मेरे लिए पर्याप्त होगा अगर मेरा संदेश कुछ "फ़ील्ड" नाम की तरह दिखता है "।

कृपया मदद करें।

उत्तर

29
class MyForm(forms.ModelForm): 
    class Meta: 
      model = MyModel 

    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['name'].error_messages = {'required': 'custom required message'} 

     # if you want to do it to all of them 
     for field in self.fields.values(): 
      field.error_messages = {'required':'The field {fieldname} is required'.format(
       fieldname=field.label)} 
+0

धन्यवाद, यह अच्छा लगता है। हालांकि मुझे यह धारणा मिली कि आपने दो बार एक ही कोड लिखने से बचना था, लेकिन कुछ और कोड लिखकर जो वास्तव में लंबा और उलझन में है;) फिर भी यह कम से कम बड़े रूपों पर कुछ काम छोड़ देगा, इसलिए फिर से धन्यवाद। – tobik

+0

मुझे लगता है कि प्रत्येक के लिए खुद का अनुमान है। यदि आपको सभी 'आवश्यक' संदेशों को प्रतिस्थापित करने की आवश्यकता है, तो यह अब तक सबसे साफ है। मुझे यह भी नहीं लगता कि यह लंबा है, जब तक कि आप __init__ कॉल को गिनें, जिसे मैं आम तौर पर सब कुछ में उपयोग करता हूं। –

+2

ध्यान दें कि आपको [एक रहस्यमय 'KeyError'] मिलेगा (http://stackoverflow.com/questions/7463159/django-form-is-valid-keeps-throwing-keyerror) यदि आपको 'अवैध' त्रुटि मिलती है और डॉन नहीं मिलता है इसके लिए एक संदेश की आपूर्ति नहीं है। –

0

आप __init__ विधि में रनटाइम पर फ़ील्ड विशेषताओं को बदल सकते हैं।

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