[pyar] Consulta Django (Forms)

Lucas Liendo mindmaster en gmail.com
Vie Abr 1 00:52:45 ART 2016


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 !


-- 

Saludos,
Lucas.

Radar : http://radar-monitoring.readthedocs.org/en/latest/index.html
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160401/ba099c6a/attachment.html>


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