2012-08-26 22 views
10

मैं अपने मॉडल में एक django DateField का उपयोग कर रहा हूं।एक कस्टम फॉर्म के बिना Django मॉडल फ़ील्ड सत्यापन

class CalWeek(models.Model): 
    start_monday = models.DateField(verbose_name="Start monday") 

मैं एक कस्टम सत्यापन विधि है कि मेरे modelField के लिए विशिष्ट है है: मुझे यकीन है कि यह वास्तव में एक सोमवार बनाना चाहते हैं। मेरे पास वर्तमान में व्यवस्थापक में एक कस्टम मॉडलफॉर्म का उपयोग करने का कोई कारण नहीं है - एक Django उत्पन्न करता है बस ठीक है। एक कस्टम फॉर्म क्लास बनाना बस इतना है कि मैं clean_start_monday(self)1 चीनी का उपयोग कर सकता हूं जो कि django फॉर्म क्लास प्रदान करता है, बस कुछ फ़ील्ड सत्यापन जोड़ने के लिए बहुत सारे काम की तरह लगता है। मुझे एहसास है कि मैं override the model's clean method कर सकता हूं और वहां ValidationError बढ़ा सकता हूं। हालांकि, यह आदर्श नहीं है: इन त्रुटियों को गैर-फील्ड त्रुटियों के रूप में जिम्मेदार ठहराया जाता है और पृष्ठ के शीर्ष पर समाप्त होता है, समस्याग्रस्त उपयोगकर्ता इनपुट के बगल में नहीं - आदर्श यूएक्स नहीं।

क्या कोई विशिष्ट मॉडल फ़ील्ड सत्यापित करने का कोई आसान तरीका है और कस्टम त्रुटि वर्ग का उपयोग किए बिना व्यवस्थापक में फ़ील्ड के बगल में आपका त्रुटि संदेश दिखाई देता है?

उत्तर

14

आप Django Validators में देख सकते हैं।

https://docs.djangoproject.com/en/dev/ref/validators/

आप कक्षा से पहले सत्यापनकर्ता डाल होगा, तो फील्ड में सत्यापनकर्ता निर्धारित किया है।

def validate_monday(date): 
    if date.weekday() != 0: 
     raise ValidationError("Please select a Monday.") 

class CalWeek(models.Model): 
    start_date = models.DateField(validators=[validate_monday]) 
+0

अच्छा! मुझे नहीं पता कि मैं इसे कैसे नजरअंदाज कर दूंगा। –

+0

कूल! पहले इस्तेमाल नहीं किया था, लेकिन यह .. बहुत साफ है। स्वच्छ क्लीनर पोस्ट करें! –

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