2016-08-10 5 views
0

Ich versuche, Python-Klassen dynamisch zu generieren. Hier eine Django-Form.Dynamisch generieren django Formen

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

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

Aber wenn Sie das Formular verwenden, wird nur das name Feld auftaucht. Irgendwelche Tipps, wie es geht?

EDIT: Fand heraus über modelform_factory, sieht aus wie es eine Lösung

EDIT2: Noch besser, sieht aus wie eine add_fields ist Methode, die ich

+0

wahrscheinlich, weil Sie Attribute auf 'MyForm' und nicht' BankForm' setzen. Aber vielleicht nur ein Tippfehler? – marcusshep

+1

oops, bearbeitet, nein, es hätte eine undefinierte Variablenausnahme ausgelöst – damio

+1

Die 'modelform_factory' Methode ist nützlich für das Erstellen von Modellformularen, aber nicht wirklich geeignet für diesen Fall, in dem Sie Felder zu einem regulären Formular hinzufügen möchten. Die Methode add_fields' ist für * Formsets *, nicht für Formulare. – Alasdair

Antwort

4

Sie können als Felder in dem __init__-Methode des Formulars hinzufügen kann folgt:

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

danke, gefunden es wurde bereits hier beantwortet, so dass es als Duplikat geschlossen werden: https://stackoverflow.com/questions/6142025/dynamically-add-field-to-a-form – damio