2010-02-10 27 views
18

Tengo un formulario dinámico en formularios. ¿Cómo puedo pasar un argumento desde mi punto de vista cuando hago una instancia de mi formulario?pasando argumentos a una forma dinámica en django

Algo así como:

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

Ésta es la forma que tengo:

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) 

Respuesta

44

añadirlo argumento como palabra clave, dicen que se llama my_arg. Asegúrese de pop() la palabra clave arg antes de llamar al super(), porque el método init de la clase principal no acepta argumentos adicionales de palabra clave.

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) 

Y cuando se crea la forma que es así:

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

Sólo por una nota, al aprender sobre '** kwargs' .. siempre estaba recibiendo error como:' __init __() tiene una argumento de palabra clave inesperado 'my_arg''. Tienes que '.pop' tus argumentos en la primera línea de tu constructor o al menos eso me ayudó a resolver mis problemas. – krizajb

+0

Quiero ser capaz de heredar DynamicForm, así que tengo una clase de formulario base que puedo pasar parámetros personalizados. ¿Puedes mostrar un ejemplo? – heri0n

+7

@krizajB en realidad, usted tiene que kwargs.pop antes de super(), de lo contrario, la clase base recibirá argumentos que no admite. Pero no tiene que ser la * primera * línea. – thnee

Cuestiones relacionadas