2008-10-09 17 views
80

मेरे उपयोगकर्ता इनपुट मानों को सत्यापित करने के बाद मैं उन्हें आगे की प्रक्रिया के लिए एक अलग (बाहरी) प्रक्रिया में भेजता हूं। यह बाहरी प्रक्रिया संभावित रूप से मूल्यों में और त्रुटियों को पा सकती है।पहले से ही मान्य फॉर्म में त्रुटियों को इंजेक्ट करें?

क्या इन त्रुटियों को पहले से मान्य फॉर्म में इंजेक्ट करने का कोई तरीका है ताकि उन्हें सामान्य रूप त्रुटि त्रुटि विधियों (या बेहतर वैकल्पिक दृष्टिकोण) के माध्यम से प्रदर्शित किया जा सके?

एक सुझाव फॉर्म सत्यापन में बाह्य प्रसंस्करण को शामिल करना था, जो आदर्श नहीं है क्योंकि बाहरी प्रक्रिया केवल मान्य होने से कहीं अधिक है।

उत्तर

84

Form._errors एक मानक शब्दकोश की तरह व्यवहार किया जा सकता है।

from django.forms.util import ErrorList 
errors = form._errors.setdefault("myfield", ErrorList()) 
errors.append(u"My error here") 

और तुम "myfield" के बजाय, गैर क्षेत्र त्रुटियाँ जोड़ने ("__all__" करने के लिए डिफ़ॉल्ट) django.forms.forms.NON_FIELD_ERRORS उपयोग करना चाहते हैं: यह ErrorList वर्ग का उपयोग करने के लिए, और मौजूदा सूची में त्रुटियों संलग्न करने के लिए अच्छे फार्म माना जाता है।

+0

Django के मिलान से मेल खाने के लिए कर रहे हैं, आपको ErrorList ऑब्जेक्ट्स डालना चाहिए। –

+1

यह थोड़ा अप्रिय लगता है, क्योंकि "_errors" नाम से पता चलता है कि यह फॉर्म क्लास में आंतरिक होना चाहिए। क्या यह Django में ऐसा करने का मानक तरीका है? मैं ओपी के समान स्थिति में हूं: मेरे पास एक ऐसा फॉर्म है जहां उपयोगकर्ता एक नया नाम प्रदान करते हैं जो डेटाबेस में अद्वितीय होना चाहिए। यदि कोई टक्कर है तो मैं फॉर्म को उस पर एक त्रुटि के साथ वापस भेजना चाहता हूं, लेकिन मुझे तब तक पता नहीं चलेगा जब तक कि मैं वास्तव में डेटाबेस सम्मिलित करने की कोशिश नहीं करता। (सिद्धांत रूप में वैधकर्ता डेटाबेस की जांच कर सकता है, लेकिन वह बदबू आ रही है और दौड़-प्रवण है।) – Weeble

+1

@scompt: धन्यवाद, तय। @Weeble: '_errors' सार्वजनिक रूप एपीआई का हिस्सा है, इसके नाम के बावजूद; एक दस्तावेज़ लिंक के लिए इंसिन का जवाब देखें। –

14

आप प्रपत्र के _errors सीधे विशेषता के लिए अतिरिक्त त्रुटि विवरण जोड़ सकते हैं:

https://docs.djangoproject.com/en/1.5/ref/forms/validation/#described-later https://docs.djangoproject.com/en/1.6/ref/forms/validation/#modifying-field-errors

+5

और जाहिरा तौर पर पद 1.6 विकास संस्करण में, वे एक 'add_error' समारोह जोड़ रहे हैं: https://docs.djangoproject.com/en/dev/ref/forms/api/#django .forms.Form.add_error – brianmearns

+0

और अब Django 1.7 में एक आधिकारिक add_error फ़ंक्शन है: https://docs.djangoproject.com/en/1.7/ref/forms/api/#django.forms.Form.add_error –

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