2011-06-01 28 views
8

tengo un modelo como este:Django - cómo establecer en blanco = False, se requiere = False

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

y tengo un formulario para insertar el campo. En realidad django permite espacios vacíos, por ejemplo si inserto en el campo un espacio funciona. Pero ahora quiero arreglar esto: el campo no es obligatorio, pero si un usuario inserta espacios, la validación debería fallar.

He añadido:

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

pero no funciona. ¿Cuál es el error?

+0

En blanco significaría una cadena vacía (a diferencia de un valor nulo) - una cadena con espacios no está en blanco. Si desea evitar que un campo tenga solo espacios, creo que tendrá que escribir sus propios métodos * clean * personalizados. –

Respuesta

12

Whitespace no se considera en blanco. en blanco se refiere específicamente a sin entrada (es decir, una cadena vacía ''). Deberá usar un validador de campo modelo que genere una excepción si el valor solo consta de espacios. Vea the documentation para más detalles.

Ejemplo:

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

Mi edición ha sido rechazada, pero debe implementar una comprobación 'isinstance (value, str)' además de 'value.strip() == ''' ya que su función original se romperá si el valor del campo que está comprobando es 'None 'tipo (no se puede llamar a' .strip() 'en él). – py4on

+0

no hay problema - Lo implementé el otro día así que esa es la única razón por la que lo atrapé. Aunque estamos en ello, ¿hay alguna razón para no hacer 'no value.strip()' en lugar de 'value.strip() == '''? – py4on

1

Es necesario crear su propia forma y realizar la validación personalizada en el campo para asegurarse de que los espacios repetidos son criados como un error de validación. Algo como esto:

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 
Cuestiones relacionadas