2012-09-26 16 views
10

मैं Django मॉडल के किसी विशेष क्षेत्र के लिए अपनी खुद की सत्यापन दिनचर्या को परिभाषित करना चाहता हूं। मैं चाहता हूं कि त्रुटि संदेश व्यवस्थापक रूप में प्रदर्शित किया जाए, लेकिन अगर इकाई को अपने पायथन कोड से सहेजा जाता है तो मैं भी वही सत्यापन करना चाहता हूं। क्या DRY सिद्धांत को तोड़ने के बिना ऐसा करने का कोई तरीका है?मॉडल में और व्यवस्थापक में Django फील्ड सत्यापन?

उत्तर

8

यदि आप किसी व्यक्तिगत फ़ील्ड को सत्यापित करना चाहते हैं, तो आप write a validator कर सकते हैं और इसे अपने मॉडल फ़ील्ड में जोड़ सकते हैं।

जब भी मॉडल full_clean विधि कहा जाता है तो सत्यापनकर्ता फ़ील्ड के लिए चलाया जाएगा। जब भी मॉडल फॉर्म मान्य होता है (यह Django व्यवस्थापक सहित) चलाया जाएगा, लेकिन जब मॉडल इंस्टेंस सहेजा जाता है तो यह स्वचालित रूप से नहीं चलाया जाएगा - आपको मैन्युअल रूप से पाइथन कोड में full_clean पर कॉल करना होगा।

m = MyModel(x=20) 
m.full_clean() # may raise ValidationError 
m.save() 

आप जब भी मॉडल सहेजा जाता है चलाने के लिए सत्यापनकर्ता मजबूर करने के लिए करना चाहता था, तो आप विधि बचाने ओवरराइड और full_clean वहाँ कह सकते हैं। ध्यान दें कि यह मॉडल रूपों और django व्यवस्थापक का उपयोग करते समय सत्यापन को दो बार चलाने का कारण बनता है।

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