[pyar] Consulta Django (Forms)

Gonzalo mail en gonzalodelgado.com.ar
Vie Abr 1 07:21:32 ART 2016


El 1/4/16 a las 12:52 a.m., Lucas Liendo escribió:
> Buenas ! Les queria hacer un consulta un poco rebuscada (tiene una
> justificacion esta complicacion). Supongamos que tenemos un formulario :
> 
> class CustomForm(forms.Form):
>     name = forms.CharField()
>     last_name = forms.CharField()
>     ....
> 
> La consulta que queria compartir con Uds es la siguiente. Supongamos que
> necesitamos darle al usuario de nuestra aplicacion la habilidad de
> diseniar formularios, es decir que nuestro formulario no estaria
> predefinido de antemano (asumo que hay alguna ui en el navegador que me
> deja elegir el nombre del campo y su tipo). Hasta aca sin problemas
> porque mi controlador podria usar un FormBuilder como el siguiente que
> se encarga de construir formularios de forma arbitraria (nos devuelve
> una clase que hereda de Form) asi que en principio podria crear
> formularios de forma arbitraria :
> 
> class FormBuilder(object):
>     def __init__(self, class_name):
>         self.Class = type(class_name, (forms.Form,), {})
>         self.fields = []
> 
>     def add_fields(self, fields):
>         self.fields.extend(fields)
>         return self
>        
>     def build(self):
>         [setattr(self.Class, field_name, FieldClass(*args, **kwargs))
> for field_name, FieldClass, args, kwargs in self.fields]
>         return self.Class
> 
> Por ejemplo si quisiera construir el formulario del ejemplo inicial
> podriamos usar el FormBuilder asi (ojo que este codigo y el de arriba
> son solo ideas, pueden tener errores) :
> 
> CustomForm = FormBuilder('CustomForm').add_fields([
>     ('name', CharField, (), {}),
>     ('last_name', CharField, (), {}),
> ]).build()
> 
> En algun momento, es necesario guardar el formulario para luego poder
> renderearlo. Mi duda viene justamente por este lado. Me gustaria poder
> serializar por ejemplo la clase CustomForm (posiblemente a un JSON,
> aclaro que necesito serializar la clase y NO una instancia de la misma),
> guardar este JSON y luego dinamicamente ir regenerando cada uno de los
> formularios que el usuario creo desde un controlador para finalmente
> renderealos a una vista. Estuve buscando un poco acerca de esto y no
> pude encontrar mucha informacion. Alguien alguna vez necesito realizar
> algo similar ? No tengo basta experiencia en Django, pero si tuviera que
> hacer esta serializacion manualmente creo que se tornaria (creo) compleja...
> 
> Por ahi la forma en que estoy pensando como resolver este problema no es
> la mas adecuada, pero por el momento es lo unico que se me ocurrio.
> 
> Desde ya muchisimas gracias !

Creo que esta app hace lo que necesitás:
http://django-forms-builder.readthedocs.org/en/stable/ :-)

-- 
Gonzalo


Más información sobre la lista de distribución pyar