2009-09-24 10 views
11

Necesito hacer una excepción en el método de guardado de un modelo. Espero que exista una excepción que pueda detectar cualquier django ModelForm que utilice este modelo, incluidos los formularios de administrador.Aumento de la validaciónError del método de salvar del modelo django?

Intenté elevar django.forms.ValidationError, pero esto parece no ser detectado por los formularios de administración. El modelo realiza una llamada a procedimiento remoto en el momento de guardar, y hasta esta llamada no se sabe si la entrada es válida.

Gracias, Pete

Respuesta

8

actualmente no hay manera de realizar la validación en el modelo, salvo métodos. Sin embargo, esto se está desarrollando, como una rama de validación de modelo separada, y debería fusionarse en el tronco en los próximos meses.

Mientras tanto, debe realizar la validación en el nivel del formulario. Es bastante simple crear una subclase ModelForm con un método clean() que hace su llamada remota y plantea la excepción en consecuencia, y usar esto tanto en el administrador como en la base de sus otros formularios.

+3

django me ha estado molestando últimamente. Fui con este enfoque, pero no estoy satisfecho. El código que modifica un modelo no pertenece a un método limpio. – slypete

+0

Solo registrando, ¿esta rama de la que hablas ha sido fusionada? – rennat

+5

Forma parte de Django 1.2: http://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects – Tom

10

Desde Django 1.2, esto es lo que he estado haciendo:

class MyModel(models.Model): 

    <...model fields...> 

    def clean(self, *args, **kwargs): 
     if <some constraint not met>: 
      raise ValidationError('You have not met a constraint!') 
     super(MyModel, self).clean(*args, **kwargs) 

    def full_clean(self, *args, **kwargs): 
     return self.clean(*args, **kwargs) 

    def save(self, *args, **kwargs): 
     self.full_clean() 
     super(MyModel, self).save(*args, **kwargs) 

Esto tiene la ventaja de trabajar tanto dentro como fuera de la administración.

Cuestiones relacionadas