2009-09-24 2 views
11

모델의 save 메소드에서 예외를 발생시켜야합니다. 난 예외가 존재하는 모든 django ModelForm에 의해 그 관리 양식을 포함 하여이 모델을 사용하여 잡히기를 바라고 있어요.Django 모델의 save 메소드에서 ValidationError를 발생시키지 않습니까?

나는 django.forms.ValidationError을 키우려고했지만 관리자 양식에 의해 발견되지 않은 것으로 보입니다. 모델은 저장시 원격 프로 시저 호출을하며, 입력이 유효한 경우이 호출까지 알 수 없습니다.

덕분에, 피트

답변

8

현재 방법 저장 모델에서 유효성 검사를 수행하는 방법은 없습니다. 그러나 이것은 별도의 모델 확인 분기로 개발 중이며 향후 몇 개월 내에 트렁크에 병합되어야합니다.

그동안 양식 수준에서 유효성 검사를 수행해야합니다. 원격 호출을 수행하고 예외를 발생시키는 clean() 메소드를 사용하여 ModelForm 서브 클래스를 작성하는 것은 매우 간단하며,이를 관리자 및 다른 양식의 기초로 사용하십시오.

+3

django는 최근에 나를 부랑포로 보내고 있습니다. 나는이 접근법으로 갔지만 만족스럽지 않습니다. 모델을 수정하는 코드는 클린 메서드에 속하지 않습니다. – slypete

+0

그냥 체크인했는데, 아직 합병 된 지점이 있습니까? – rennat

+5

Django 1.2의 일부입니다. http://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects – Tom

10

장고 1.2 때문에, 이것은 내가 뭘했는지 있습니다 :

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) 

이 내부와 관리자의 외부에서 작업의 이점이있다.

관련 문제