2011-06-01 55 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

空白將意味着一個空字符串(而不是空值) - 一個空格字符串不是空白。如果你想防止只有空格的字段,我認爲你將不得不編寫自己的自定義* clean *方法。 – 2011-06-01 00:28:07

回答

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()=='''之外執行'isinstance(value,str)'檢查,因爲如果您檢查的字段值是None,原始函數將會中斷'type(你不能調用'.strip()')。 – py4on 2017-11-04 17:06:00

+0

沒問題 - 我前幾天實施了這個,所以這是我抓到它的唯一原因。雖然我們在這,雖然,不做'value.strip()'而不是'value.strip()=='''的任何原因? – py4on 2017-11-09 22:18:33

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