2010-07-10 5 views
5

템플릿에 표시되는 장고 양식 필드에 추가 정보를 전달하려고합니다. 나는 생성자를 무시하고 다음과 같은 분야에 다른 속성을 추가하려고 :양식 필드에 추가 정보 제공

self.fields['field_name'].foo = 'bar' 

을하지만 템플릿이에 :

{{ form.field_name.foo }} 

아무것도 인쇄되지 않았다. 누구든지 양식 필드 클래스를 다시 작성/상속하지 않고 필드에 추가 정보를 추가하는 방법을 알고 있습니까?

+0

관련 : http://stackoverflow.com/questions/2270550/warnings-or-even-info-messages-instead-of-only-errors-in-django t에 대한 – guettli

답변

6

django.forms.forms에 따르면, Form__getitem__() 방법은 무엇인가, 따라서 당신이 만든 변경 무엇이든 그것을 제거, 그것을 반환하기 전에 필드 밖으로 BoundField라는 만듭니다. 당신이 정말에 더 많은 기능을 삽입 할 경우, 그것을 반환하기 전에 바운드 필드에 물건을 수행하는 메소드를 오버라이드 (override) :

class MyForm(forms.Form): 
    def __getitem__(self, name): 
     boundfield = super(forms.Form,self).__getitem__(name) 
     boundfield.foo = "bar" 
     return boundfield 

그런 "bar"은 그 형태의 모든 필드에 표시됩니다. 함수를 만들고 대신 호출하여 하드 코딩 된 문자열 이상으로 만들 수 있습니다.

더 많은 필드를 추가하거나 양식 자체에 속성을 추가하는 것이 더 일반적이지만 모든 필드에 포함해야하는 완전히 새로운 정보 클래스가있는 경우이 방법이 유용 할 수 있습니다. 템플릿에 foo에 액세스하려면 다음

class MyForm(forms.Form): 
    def __init__(self, *args, **kwargs) 
     super(forms.Form, self).__init__(*args, **kwargs) 
     self.fields['field_name'].foo = "bar" 

: 같은 일을 얻을 수있는 또 다른 방법


는 필드의 속성을 편집 BoundField"field" 속성을 통해 액세스하는 것입니다 :

{{ form.field_name.field.foo }} 
+1

감사합니다 그는 설명한다. 나는 두 가지 접근 방법 중 후자를 시도해 보니 매력처럼 작동했습니다. 다시 감사드립니다. – Max