2009-09-24 14 views
11

मुझे मॉडल की सहेजने की विधि में अपवाद उठाना होगा। मुझे उम्मीद है कि एक अपवाद मौजूद है जिसे किसी भी django ModelForm द्वारा पकड़ा जाएगा जो इस मॉडल का उपयोग व्यवस्थापक रूपों सहित करता है।django मॉडल की सहेजने विधि से प्रमाणीकरण त्रुटि बढ़ाना?

मैंने django.forms.ValidationError बढ़ाने की कोशिश की, लेकिन यह व्यवस्थापक रूपों से बेकार प्रतीत होता है। मॉडल सहेजने पर रिमोट प्रोसेस कॉल करता है, और इनपुट मान्य होने पर यह कॉल तब तक ज्ञात नहीं है।

धन्यवाद, पीट

उत्तर

8

वर्तमान तरीकों को बचाने मॉडल में सत्यापन प्रदर्शन का कोई रास्ता नहीं है। हालांकि इसे एक अलग मॉडल-सत्यापन शाखा के रूप में विकसित किया जा रहा है, और अगले कुछ महीनों में ट्रंक में विलय किया जाना चाहिए।

इस बीच, आपको फॉर्म स्तर पर सत्यापन करने की आवश्यकता है। सबक्लास को विधि के साथ बनाना बहुत आसान है जो आपकी रिमोट कॉल करता है और तदनुसार अपवाद उठाता है, और इसे व्यवस्थापक में और अपने अन्य रूपों के आधार के रूप में उपयोग करता है।

+3

django मुझे हाल ही में बाहर कर रहा है। मैं इस दृष्टिकोण के साथ गया, लेकिन मैं संतुष्ट नहीं हूँ। कोड जो मॉडल को संशोधित करता है वह एक साफ विधि में नहीं है। – slypete

+0

बस जांच कर रहा है, क्या इस शाखा में आपने अभी तक विलय के बारे में बात की है? – rennat

+5

यह Django 1.2 का हिस्सा है: http://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects – Tom

10

Django 1.2 के बाद से, यह है कि मैं क्या कर रहा हूँ है:

class MyModel(models.Model): 

    <...model fields...> 

    def clean(self, *args, **kwargs): 
     if <some constraint not met>: 
      raise ValidationError('You have not met a constraint!') 
     super(MyModel, self).clean(*args, **kwargs) 

    def full_clean(self, *args, **kwargs): 
     return self.clean(*args, **kwargs) 

    def save(self, *args, **kwargs): 
     self.full_clean() 
     super(MyModel, self).save(*args, **kwargs) 

यह दोनों के अंदर और व्यवस्थापक के बाहर काम करने का लाभ है।

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