2010-01-24 2 views
4

양식 정의에 양식에 특수 오류 렌더링 기능을 부여 할 수있는 방법이 있습니까? customizing-the-error-list-format 아래의 문서에서는 양식에 특수 오류 렌더링 기능을 부여하는 방법을 보여 주지만 정의 할 때가 아니라 양식을 인스턴스화 할 때 선언해야하는 것처럼 보입니다.django forms error_class

그래서 당신은 같은 일부 ErrorList 클래스를 정의 할 수 있습니다 :

from django.forms.util import ErrorList 
class DivErrorList(ErrorList): 
    def __unicode__(self): 
     return self.as_divs() 
    def as_divs(self): 
     if not self: return u'' 
     return u'<div class="errorlist">%s</div>' % ''.join([u'<div class="error">%s</div>' % e for e in self]) 

을 그리고 당신이 당신의 양식을 인스턴스화 할 때 당신은 error_class으로 인스턴스화 할 수 있습니다

f = ContactForm(data, auto_id=False, error_class=DivErrorList) 
f.as_p() 

<div class="errorlist"><div class="error">This field is required.</div></div> 
<p>Subject: <input type="text" name="subject" maxlength="100" /></p> 
<p>Message: <input type="text" name="message" value="Hi there" /></p> 
<div class="errorlist"><div class="error">Enter a valid e-mail address.</div></div> 
<p>Sender: <input type="text" name="sender" value="invalid e-mail address" /></p> 
<p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p> 

하지만 이름 싶지 않아 오류 클래스는 양식을 인스턴스화 할 때마다 양식 정의 내에 사용자 정의 오류 렌더러를 정의하는 방법이 있습니까?

답변

6

, 당신은 당신의 자신의 폼 기본 클래스처럼 정의되어있다. 그러면 모든 양식의 기본 오류 렌더러는 DivErrorList이되며, 여전히 error_class 인수를 사용하여 변경할 수 있습니다. ModelForm의 내용은

:

class MyBaseModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     kwargs_new = {'error_class': DivErrorList} 
     kwargs_new.update(kwargs) 
     super(MyBaseModelForm, self).__init__(*args, **kwargs_new) 
3

는 다음과 같은 시도 :

class MyForm(forms.Form): 
    ... 

    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.error_class = DivErrorList 

작동합니다. 그러나 나는 그것을 시험하지 않았다.

class MyBaseForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     kwargs_new = {'error_class': DivErrorList} 
     kwargs_new.update(kwargs) 
     super(MyBaseForm, self).__init__(self, *args, **kwargs_new) 

을 그리고 한 것을 모든 형태의 서브 클래스가 :이 동작은 모든 형태의 공통하려면

+0

이 나를 위해 작동하지 않았다 –