2011-02-07 3 views
1

저는 PHP/ZEND에 강한 배경을 가지고 있으며 이제는 Python/Django를 배우고 있습니다. Zend에서는 폼 요소 객체를 가져 와서 언제든지 편집 할 수 있습니다. 이는 완전히 새로운 양식 객체를 만들지 않고 양식 객체를 가져 와서 필요에 따라 작게 변경할 수 있기 때문에 좋습니다. 나는이 일을하려고 장고에있다.Python/Django - 생성 후 모델 양식 편집

나는 형식이 있습니다. 투표소로 부르 자. 이 양식에는 다른보기 메소드에 적용된 다른 위젯이 필요할 수 있습니다. 나는 객체가 뷰 내부에 생성 된 후에 나는 모델 양식 요소를 수정할

, 기본적으로

form = VoteForm(initial={}) 
## then something like 
form.field.widget = newWidget 

즉 ... 같은 작은 변화가 전체 양식을 다시하고 싶지 않아 ...

답변

4

당신은 자신의 질문에 답변했습니다. 나는 개인적으로이 방법을 선호

class VoteForm(forms.Form): 
    myfield = ... 
    def __init__(self, hide_field=False, *args, **kwargs): 
     super(VoteForm, self).__init__(*args, **kwargs) 
     if hide_field: 
      self.fields['myfield'].widget = ... 

form = VoteForm(hide_field=True, initial={}) 

약 대신에 확산 한 곳에서 모든 형태의 논리를 유지 :

# tested on 1.2.3 
form = VoteForm(initial={}) 
form.fields['field_name'].widget = forms.HiddenInput() # make sure you call widget() 

form.as_p() # shows new widget 
+0

그 방법을 시도하지 않고 시도했습니다. 나는 숨기고 싶은 분야가 있습니다. 이 기법을 적용하면 양식 요소가 숨겨진 것으로 표시되지 않습니다. django에서 어떻게 할 수 있는지 예를 들어 주시겠습니까? (내장 된 위젯을 사용하는 방법) – GregL83

+0

안녕하세요 GregL83,이 코드는 작동합니다 (지금 1.2.3에서 테스트되었습니다). 어떤 유형의 필드를 숨기려고합니까? 또한 위젯 **() ** –

+0

양식 필드 "title = forms.CharField (label ="Header ", required = True)를 호출하고 있는지 확인하십시오 : form [ 'title']. widget = forms.HiddenInput() – GregL83

1

또 다른 방법은 같은 것을 폼의 초기화() 메소드를 오버라이드 (override)하는 것입니다. 양식과보기가 별도의 파일에 있다고 가정하면보기에서 위젯을 가져 오기 위해 여러 장의 'django 가져 오기 양식'을 수행 할 필요가 없다는 것을 의미합니다.