2011-06-01 22 views
8

मैं इस तरह एक मॉडल है स्थापित करने के लिए कैसे:Django - खाली = झूठी, आवश्यक = झूठी

class Message(models.Model): 
    msg = models.CharField(max_length = 150) 

और मैं डालने के लिए एक फार्म क्षेत्र की है। वास्तव में django खाली रिक्त स्थान की अनुमति देता है, उदाहरण के लिए यदि मैं उस क्षेत्र में प्रवेश करता हूं जो एक स्थान बनाता है। लेकिन अब मैं इसे ठीक करना चाहता हूं: फ़ील्ड आवश्यक नहीं है, लेकिन यदि कोई उपयोगकर्ता रिक्त स्थान डालता है, तो सत्यापन विफल होना चाहिए।

मैं जोड़ दिया है:

class Message(models.Model): 
    msg = models.CharField(max_length = 150, blank = False) 

लेकिन यह काम नहीं करता। गलती क्या है?

+0

खाली का मतलब खाली स्ट्रिंग (शून्य मूल्य के विपरीत) होगा - रिक्त स्थान वाली स्ट्रिंग खाली नहीं है। यदि आप केवल रिक्त स्थान वाले फ़ील्ड को रोकना चाहते हैं, तो मुझे लगता है कि आपको अपनी खुद की कस्टम * साफ * विधियां लिखनी होंगी। –

उत्तर

12

Whitespaceखाली माना नहीं जाता है। खाली विशेष रूप से कोई इनपुट (यानी एक खाली स्ट्रिंग '') को संदर्भित करता है। आपको एक मॉडल फ़ील्ड सत्यापनकर्ता का उपयोग करने की आवश्यकता होगी जो अपवाद उठाता है यदि मान में केवल रिक्त स्थान होते हैं। विवरण के लिए the documentation देखें।

उदाहरण:

def validate_not_spaces(value): 
    if isinstance(value, str) and value.strip() == '': 
     raise ValidationError(u"You must provide more than just whitespace.") 

class Message(models.Model): 
    msg = models.CharField(max_length=150, blank=False, 
          validators=[validate_not_spaces]) 
+0

मेरा संपादन अस्वीकार कर दिया गया है, लेकिन आपको 'value.strip() ==' 'के अतिरिक्त' इंस्टेंसेंस (वैल्यू, स्ट्र ') चेक लागू करना चाहिए क्योंकि यदि आपका मूल मूल्य यह जांच रहा है कि फ़ील्ड मान इसकी जांच है तो कोई नहीं 'टाइप करें (आप इसे' .strip() 'पर कॉल नहीं कर सकते हैं)। – py4on

+0

कोई समस्या नहीं - मैंने इसे दूसरे दिन लागू किया ताकि यही कारण है कि मैंने इसे पकड़ा। हालांकि हम इस पर हैं, वैसे भी 'value.strip() == ''' 'के बजाय value.strip()' नहीं करने का कोई कारण नहीं है? – py4on

1

आप अपनी खुद की फार्म बना सकते हैं और यह सुनिश्चित करें कि बार-बार रिक्त स्थान एक प्रमाणीकरण त्रुटि के रूप में उठाया जाता है बनाने के लिए मैदान पर कस्टम सत्यापन प्रदर्शन करने की जरूरत है। कुछ ऐसा:

import re 

class MessageForm(form.ModelForm) 
    def clean_msg(self): 
     msg = self.cleaned_data['msg'] 
     if re.match('/[\s]+$',msg): 
      raise ValidationError("Spaces not allowed") 
     return msg 
संबंधित मुद्दे