2010-12-07 11 views
3

私の質問は静かでシンプルですが、私はmodels.Modelから継承する私のアプリケーションモデルのクラスを持っています。 私のフォームにカスタム検証を実行するために、django-adminのclean_fieldsメソッドをオーバーライドしています。 問題は、ユーザーがカスタム検証からValidationErrorを発生させたときに、ユーザーが正しい情報でフォームを再度送信しようとすると、以前の送信からのデータが常に保持されることです。Django-admin clean_fieldsオーバーライド、サブミット時に以前のデータを保持

 
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でかなり明確です。

関連する問題