2010-02-10 22 views
18

Ho un modulo dinamico nei moduli. Come posso passare un argomento dal mio punto di vista quando istanzio il mio modulo?passare argomenti a una forma dinamica in django

Qualcosa di simile:

form = DynamicForm("some string argument I'm passing to my form") 

Questa è la forma che ho:

class DynamicForm(Form): 
def __init__(self, *args, **kwargs): 
    super(DynamicForm, self).__init__(*args, **kwargs) 
    for item in range(5): 
     self.fields['test_field_%d' % item] = CharField(max_length=255) 

risposta

44

inserirlo argomento come parola chiave, dire si chiama my_arg. Assicurati di pop() la parola chiave arg prima di chiamare super(), perché il metodo init della classe genitore non accetta argomenti di parole chiave extra.

class DynamicForm(Form): 
    def __init__(self, *args, **kwargs): 
    my_arg = kwargs.pop('my_arg') 
    super(DynamicForm, self).__init__(*args, **kwargs) 
    for item in range(5): 
     self.fields['test_field_%d' % item] = CharField(max_length=255) 

E quando si crea modulo E 'in questo modo:

form = DynamicForm(..., my_arg='value') 
+9

Solo per una nota, in cui conoscere '** kwargs' .. mi è stato sempre ottenendo l'errore del tipo:' __init __() ha ottenuto un argomento di parole chiave imprevisto 'my_arg''. U devi ".pop" i tuoi argomenti in prima linea del tuo costruttore o almeno questo mi ha aiutato a risolvere i miei problemi. – krizajb

+0

Voglio poter ereditare DynamicForm quindi ho una classe Form base che posso passare parametri personalizzati. Puoi mostrare un esempio? – heri0n

+7

@krizajB, in realtà, devi kwargs.pop prima di super(), altrimenti la classe base riceverà argomenti che non supporta. Ma non deve essere la * prima * linea. – thnee

Problemi correlati