2012-08-26 18 views
10

Estoy utilizando un campo de django DateField en mi modelo.Validación de campo del modelo de Django sin un formulario personalizado

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

que tienen un método de validación personalizado que es específico de mi modelField: Quiero para asegurarse de que en realidad es un lunes. Actualmente no tengo ninguna razón para usar un ModelForm personalizado en el administrador, el que Django genera está bien. Crear una clase de formulario personalizada solo para poder utilizar el nivel clean_start_monday(self)1 que proporcionan las clases de formulario de django parece mucho trabajo solo para agregar algo de validación de campo. Me doy cuenta de que puedo override the model's clean method y levantar un ValidationError allí. Sin embargo, esto no es ideal: estos errores se atribuyen como errores que no son de campo y terminan en la parte superior de la página, no al lado de la entrada problemática del usuario, no es un UX ideal.

¿Existe alguna manera fácil de validar un campo de modelo específico y mostrar su mensaje de error junto al campo en el administrador, sin tener que usar una clase de formulario personalizada?

Respuesta

14

Puede consultar los Validadores de Django.

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

Se podría poner el validador antes de la clase, a continuación, establecer el validador en el campo.

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

¡Agradable! No sé cómo había pasado esto por alto. –

+0

¡Genial! No había usado uno antes, pero esto es ... muy limpio. ¡Validar post limpia! –

Cuestiones relacionadas