कृपया मुझे यह समझने में सहायता करें कि मेरे द्वारा किए गए निम्नलिखित विकल्प बेवकूफ/अच्छे हैं और यदि नहीं, तो सुधार कैसे करें।डीजेगो मॉडल प्रमाणीकरण को स्थानांतरित करने के लिए निष्क्रिय तरीका
1) फार्म मान्यकरण
से अधिक मॉडल मान्यकरण मैं के रूप में यह डेटा के लिए नियम बनाने के लिए एक और अधिक सूखी और मौलिक तरीके लगता है जब भी संभव हो फ़ॉर्म सत्यापन से अधिक नए model validation उपयोग करने के लिए पसंद करते हैं। एक साधारण कैलेंडर प्रविष्टि मॉडल के लिए दो उदाहरण:
"अवधि की तुलना में (अंत से शुरू) कम होना चाहिए" यह मुहावरेदार करने के लिए अच्छा है/"अंत से पहले किया जाना चाहिए शुरू" उन्हें मॉडल स्तर पर रखें ताकि उन्हें फॉर्म में डालना पड़े? यदि मॉडलफॉर्म सबसे अच्छा जवाब है, तो एक ही रूप में एकाधिक मॉडलों का उपयोग करने के मामले के बारे में क्या?
(संपादित करें: मुझे नहीं पता था कि कई ModelForms वास्तव में एक साथ इस्तेमाल किया जा सकता)
2) एक फॉर्म (नहीं ModelForm)
(संपादित करने के लिए मॉडल मान्यता स्थानांतरित कर रहा है: यह पता चला है पुनर्रचना मॉडल सत्यापन और फॉर्म सत्यापन के बीच नलसाजी मेरी स्थिति में आवश्यक नहीं है और नीचे दिए गए समाधान दिखाते हैं कि क्यों)
चलो एक पल के लिए मान लें कि मेरे पास किसी भी मॉडल सत्यापन त्रुटियों को सीधे स्थानांतरित किया जा सकता है और सीधे उपयोगकर्ता को प्रदर्शित किया जा सकता है (यानी अनुवाद मॉडल को अनदेखा करें उपयोगकर्ता के अनुकूल फॉर्म सत्यापन त्रुटियों में सत्यापन त्रुटियां)।
view_with_a_form:
...
if form.is_valid():
instance = ...
...
#save() is overridden to do full_clean with optional exclusions
try: instance.save()
except ValidationError e:
nfe= e.message_dict[NON_FIELD_ERRORS]
#this is one big question mark:
instance._errors['__all__'] = ErrorList(nfe)
#this is the other big question mark. seems unnatural
if form.is_valid()
return response...
... #other code in standard format
#send the user the form as 1)new 2)form errors 3)model errors
return form
कोड में टिप्पणी की है::
क) यह एक मुहावरेदार/अच्छा है
यह एक काम कर रहा तरह से मैं यह करने के लिए के साथ आया था (एक ही स्थान पर, कोई सहायक कार्यों) है मॉडल त्रुटियों को किसी रूप में स्थानांतरित करने का तरीका?
बी) क्या यह नई "फ़ॉर्म" त्रुटियों के परीक्षण के लिए एक मूर्ख/अच्छा तरीका है?
नोट: यह उदाहरण गैर-फील्ड त्रुटियों का उपयोग करता है, लेकिन मुझे लगता है कि यह फ़ील्ड त्रुटियों पर समान रूप से लागू हो सकता है।
मैं चयनित उत्तर बदल रहा हूं क्योंकि स्टीफानो के अपडेट ने मुझे वास्तव में एक और विधि ([यहां संयुक्त मॉडलफॉर्म विधियों में से एक] को अनुकूलित करने के लिए आश्वस्त किया है (http://stackoverflow.com/questions/569468/django-multiple-models -एक-टेम्पलेट-उपयोग-रूपों)) मॉडल सत्यापन और फॉर्म सत्यापन के बीच नलसाजी को फिर से शुरू करने की आवश्यकता के बिना।(मुझे पता नहीं था कि उन्हें जोड़ा जा सकता है)। क्रिस का जवाब मेरी समझ में सबसे अच्छा है। – KobeJohn