2009-09-26 20 views
41

कैसे मैं डिफ़ॉल्ट रूप त्रुटि संदेश (उदाहरण के लिए: अन्य भाषा में उन्हें जरूरत) अधिलेखित कर सकते हैं अपने प्रोजेक्ट (या कम से कम 1 अनुप्रयोग के लिए)Django ओवरराइड डिफ़ॉल्ट रूप त्रुटि संदेश

धन्यवाद में सभी ऐप्स के लिए!

उत्तर

58

सबसे आसान तरीका फॉर्म फ़ील्ड परिभाषा में डिफ़ॉल्ट त्रुटियों का सेट प्रदान करना सबसे आसान तरीका है। फॉर्म फ़ील्ड इसके लिए नामित तर्क ले सकते हैं। उदाहरण के लिए:

my_default_errors = { 
    'required': 'This field is required', 
    'invalid': 'Enter a valid value' 
} 

class MyForm(forms.Form): 
    some_field = forms.CharField(error_messages=my_default_errors) 
    .... 

आशा है कि इससे मदद मिलती है।

+0

हाँ। लेकिन मैं फॉर्म विशिष्ट सेट करने के लिए लचीलापन रखने के साथ डिफ़ॉल्ट को ओवरराइड करना चाहता हूं ... अपने मामले में मुझे डिफ़ॉल्ट रूप से मर्ज करना होगा और प्रत्येक बार मैन्युअल रूप से त्रुटि संदेश डाइट्स बनाना होगा – Brock

+0

@ ब्रॉक यह इतना बुरा नहीं है। आप केवल 'my_default_errors.update ({...})' फ़ील्ड में ड्रॉप या विशिष्ट मानों को बनाने के लिए लिख सकते हैं। –

3

आप Django के उत्कृष्ट i18n support पर देख सकते हैं।

3

हम्म, ऐसा लगता है कि समस्या के लिए कोई आसान काम नहीं है। सबसे आसान तरीका है error_messages तर्क का उपयोग करने के लिए है

class CharField(Field): 
    default_error_messages = { 
     'max_length': _(u'Ensure this value has at most %(max)d characters (it has %(length)d).'), 
     'min_length': _(u'Ensure this value has at least %(min)d characters (it has %(length)d).'), 
    } 

और:

छलबल Django कोड के माध्यम से स्कीम, मैंने पाया कि डिफ़ॉल्ट त्रुटि संदेश हार्ड-कोडेड प्रत्येक प्रपत्र क्षेत्र वर्ग में कर रहे हैं, पूर्व के लिए तो मैं आवरण समारोह लिखना पड़ा:

def DZForm(name, args = {}): 
    error_messages = { 
     'required': u'required', 
     'invalid': u'invalid', 
    } 
    if 'error_messages' in args.keys(): 
     args['error_messages'] = error_messages.update(args['error_messages']) 
    else: 
     args['error_messages'] = error_messages 
    return getattr(forms, name)(**args) 

SMDB वास्तव में इसे :)

देखने के लिए appreaciate होगा ऐसा करने का अधिक elegent तरह से जानता है धन्यवाद!

-5

चूंकि यह पृष्ठ एक खोज में आता है, शायद यह प्रश्न पुराना है कि मेरा $ 0.02 जोड़ना उचित है। (मैं अभी भी स्टैक ओवरफ्लो के विशेष शिष्टाचार के लिए उपयोग कर रहा हूं।)

अंडरस्कोर ("_") ugettext_lazy के लिए उपनाम (यदि यह सही शब्द है); "हार्ड-कोडेड" संदेशों के साथ फ़ाइल के शीर्ष पर आयात विवरण देखें। फिर, Django के अंतर्राष्ट्रीयकरण दस्तावेज़ों की मदद करनी चाहिए, उदा। http://www.djangobook.com/en/2.0/chapter19/

6

यह भी Google से यहां आते हैं और मुझे जो भी चाहिए, वह मेरे फॉर्म में सभी फ़ील्ड के लिए डिफ़ॉल्ट आवश्यक संदेशों को ओवरराइट करना है, हर बार जब मैं नए फॉर्म फ़ील्ड को परिभाषित करता हूं तो त्रुटि_मेसेज तर्क को पारित करने के बजाय। इसके अलावा, मैं अभी तक i18n में जाने के लिए तैयार नहीं हूं, इस ऐप्स को बहुभाषी होने की आवश्यकता नहीं है। इस ब्लॉग पोस्ट में टिप्पणी जो मैं चाहता के सबसे करीब है: -

http://davedash.com/2008/11/28/custom-error-messages-for-django-forms/

सभी फ़ॉर्म फ़ील्ड कि संदेशों की आवश्यकता है के लिए, यह मैं क्या किया है: -

class MyForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     for k, field in self.fields.items(): 
      if 'required' in field.error_messages: 
       field.error_messages['required'] = 'You have to field this.' 

class MUserForm(MyForm): 
    user = forms.CharField(
     label="Username", 
    ) 
    .... 
1

मैं कहो एक BaseForm के साथ कुछ error_messages शब्दकोश की तरह:

error_messages = { 
    'required': 'This field is required', 
    'caps': 'This field if case sensitive' 
} 

और मैं एक त्रुटि संदेश ओवरराइड करना चाहते:

class MySpecialForm(BaseForm): 
    def __init__(self, *args, **kwargs): 
     super(MySpecialForm, self).__init__(*args, **kwargs) 
     self.error_messages['caps'] = 'Hey, that CAPSLOCK is on!!!' 

मूल रूप से, बस शब्दकोश मानों में से एक को ओवरराइड करें। मुझे यकीन नहीं है कि यह अंतरराष्ट्रीयकरण के साथ कैसे काम करेगा।

3
ProDjango किताब से

:

from django.forms import fields, util 


class LatitudeField(fields.DecimalField): 
    default_error_messages = { 
     'out_of_range': u'Value must be within -90 and 90.', 
    } 


    def clean(self, value): 
     value = super(LatitudeField, self).clean(value) 
     if not -90 <= value <= 90: 
      raise util.ValidationError(self.error_messages['out_of_range']) 
     return value 
7

"आवश्यक" त्रुटि संदेश को ओवरराइड विश्व स्तर पर, फील्ड पर default_error_messages वर्ग विशेषता सेट:

# form error message override 
from django.forms import Field 
from django.utils.translation import ugettext_lazy 
Field.default_error_messages = { 
    'required': ugettext_lazy("This field is mandatory."), 
} 

यह किसी भी क्षेत्रों instantiated कर रहे हैं से पहले हो जाने की आवश्यकता है, जैसे सेटिंग.py में इसे शामिल करके।

+0

यह सिर्फ बंदर इसे पैच करता है और इससे बचा जाना चाहिए क्योंकि आपका ऐप लोड ऑर्डर (कई अन्य कारणों से) पर अधिक निर्भर है। –

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