2010-12-07 2 views
3

내 질문에 조용하게 간단합니다. models.Model에서 상속 한 내 응용 프로그램 모델에 클래스가 있습니다. django-admin의 clean_fields 메소드를 재정의하여 양식에 대한 사용자 정의 유효성 검사를 실행합니다. 문제는 사용자 지정 유효성 검사에서 ValidationError를 발생시킬 때 사용자가 올바른 정보로 양식을 다시 전송하려고하면 항상 이전 제출의 데이터를 유지한다는 것입니다.Django-admin clean_fields override, submit시 이전 데이터 유지

 
class SignedOffModelValidation(models.Model): 
    class Meta: 
     abstract = True 

    def clean_fields(self, exclude = None): 
     super(SignedOffModelValidation, self).clean_fields(exclude) 

     errors = {} 
     if getattr(self, self._meta.immutable_sign_off_field, False): 
      relation_fields = [ 
       f for f in self._meta.fields 
       if isinstance(f,(models.ForeignKey,models.ManyToManyField,)) 
       and not f.name.endswith('_ptr') 
      ] 

      for field in relation_fields: 
       try: 
        field_value = getattr(self, field.name) 
        signed_off = getattr(
         field_value, 
         field_value._meta.immutable_sign_off_field 
        ) 
       except (AttributeError, ObjectDoesNotExist,): 
        continue 
       else: 
        if not signed_off: 
         msg = u'In order to signeoff, %s needs to be Signed Off' % \ 
          (str(field_value),) 
         errors[field.name] = ([msg]) 
      if errors: 
       raise ValidationError(errors) 

도움을 주시면 감사하겠습니다.

안부

+0

문제가이 모델을 조작하는보기/양식과 관련되어 있다는 점에 직감이 있습니다. 그걸 게시 할 수있는 기회라도 있으십니까? – leech

답변

1

당신은 clean_fields()보다는 clean() 방법을 사용해야합니다. 이것은 Django documentation에서 꽤 명확합니다.