पहले से मान्य फ़ॉर्म में त्रुटियों को इंजेक्ट करें?


97

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

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

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

जवाबों:


92

Form._errorsएक मानक शब्दकोश की तरह व्यवहार किया जा सकता है। इसे ErrorListक्लास का उपयोग करने के लिए , और मौजूदा सूची में त्रुटियों को जोड़ने के लिए अच्छा रूप माना जाता है :

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

और यदि आप गैर-फ़ील्ड त्रुटियों को जोड़ना चाहते हैं, तो इसके बजाय django.forms.forms.NON_FIELD_ERRORS(डिफ़ॉल्ट "__all__") का उपयोग करें "myfield"


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

1
@scompt: धन्यवाद, निश्चित। @Eeble: _errorsसार्वजनिक रूप एपीआई का हिस्सा है, इसके नाम के बावजूद; डॉक्स लिंक के लिए इन्सिन का उत्तर देखें।
जॉन मिलिकिन

18
यह अविश्वसनीय रूप से गैर pythonic है। फ़ॉर्म को लागू करना कितना कठिन था। '[myfield']। परिशिष्ट (my_error) या form.add_error ('myfield', my_error)? वर्तमान कार्यान्वयन में त्रुटि के लिए बहुत अधिक जगह (कोई दंडित इरादा नहीं)।
माइकल

2
अधिकतर पूर्ण। एक अतिरिक्त ध्यान दें कि यदि is_valid () आमंत्रित नहीं किया गया है, तो आप सेट form._errors = ErrorDict () की आवश्यकता होगी है
याकूब



14

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

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


6
और जाहिरा तौर पर पोस्ट 1.6 विकास संस्करण में, वे एक add_errorफ़ंक्शन जोड़ रहे हैं : docs.djangoproject.com/en/dev/ref/forms/api/…
brimearns

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

0

विशिष्ट फ़ील्ड में त्रुटि जोड़ें:

form.add_error('fieldName', 'error description')

** ग़ैर क्षेत्रों में त्रुटि जोड़ें **

form.add_error(None, 'error description')
#Only pass None instead of field name
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.