2014-04-27 8 views
0

동적으로 생성 된 파트와 정적 파트가있는 폼이 필요합니다. 그래서 서브 클래 싱을 생각하고 있지만 동적으로 생성 된 폼에서 이것이 어떻게 작동하는지 알 수 없습니다. 나는 이런 식으로 내 동적 양식을 만드는 오전 :동적 WTForm에서 서브 클래 싱하는 방법은 무엇입니까?

에서 views.py

def create_legumes_form_class(legumes): 
form_fields={}  
for legume in legumes: 
    field_id = 's_{}'.format(legume.id) 
    form_fields[field_id] = IntegerField(default=0 , validators = [InputRequired()]) 
return type('OrderForm', (Form,), form_fields) 

그런 다음 내보기 기능에서 양식 인스턴스화 :

legumes = Legumes.query.filter_by(disponible = True).all() 
OrderForm = create_legumes_form_class(legumes) 
form = OrderForm() 

그러나이 OrderForm에을() , 나는 항상 같을 (즉, 쿼리에서 동적으로 생성되지 않은) 몇 개의 BooleanField (s)를 추가해야합니다.

그래서 내가보기 기능이처럼 내 forms.py에 (정적) 양식을 추가하고 인스턴스화하는 것을 시도하고있다 :

form=OrderForm(StaticForm) 

하지만

TypeError: formdata should be a multidict-type wrapper that supports the 'getlist' method 
받고 있어요

그리고 어디에서 가져 가야할지 모르겠다! 내가 뭘 잘못하고 있니?

답변

1

OrderForm 생성자에 다른 클래스를 전달할 수없고 해당 클래스를 서브 클래스로 만들 수 없습니다. 그러나 type에 전화 할 때 제공 할 수 있습니다.

return type('OrderForm', (Form, StaticForm), form_fields) 

Form 서브 StaticForm 경우이 더욱 단순화 될 수있다.

return type('OrderForm', (StaticForm,), form_fields) 
+0

고맙습니다. 내 머리 속에서 훨씬 더 명확하게 해줍니다! – zedragon

관련 문제