2016-08-10 62 views
0

私は動的にPythonクラスを生成しようとしています。ここでは、django形式です。動的にdjangoフォームを生成する

class BankForm(forms.Form): 
    name = forms.CharField() 

for i in range(10): 
    setattr(BankForm, 'contact_' + str(i), forms.CharField()) 

ただし、フォームを使用するときは、nameフィールドのみが表示されます。どのようにそれを行うにはどのようなアドバイスですか?

EDIT約modelform_factoryを発見、それは一つの解決策

EDIT2だようになっています。さらに良いことに、私はあなたのように、フォームの__init__方法でフィールドを追加することができます

+0

おそらく、あなたが 'BankForm'ではなく' MyForm'に属性を設定しているからです。しかし、たぶんタイプミスでしょうか? – marcusshep

+1

oops、edited、no、未定義の変数例外が発生しました – damio

+1

'modelform_factory'メソッドはモデルフォームを作成するのに便利ですが、通常のフォームにフィールドを追加する場合にはあまり適していません。 add_fields'メソッドはフォームではなく* formsets *のためのものです。 – Alasdair

答えて

4

を使用することができますadd_fields方法があるように見えます次のようになります:

class BankForm(forms.Form): 
    name = forms.CharField() 

    def __init__(self, *args, **kwargs): 
     super(BankForm, self).__init__(*args, **kwargs) 
     for i in range(10): 
      self.fields['contact_' + str(i)] = forms.CharField() 
+0

ありがとうございます、すでに回答済みであることが判明したので、重複して表示されるようになりました。https://stackoverflow.com/questions/6142025/dynamically-add-field-to-a-form – damio

関連する問題