Formulario dinamico.

1,177 views
Skip to first unread message

Lauro Cesar de Oliveira

unread,
Mar 4, 2009, 10:21:47 PM3/4/09
to django...@googlegroups.com
Saudações!


Estou idealizando um wizard, e ainda não entendi como montar um formulario dinamico, baseado em determinados critérios, por exemplo:

Eu fiz:

Criei um App para eu cadastrar os tipos de campos, se input text,password,textarea etc...

Criei uma app para montar o formulario, onde dou um titulo para o formulario, e seleciono via ManyToMany os campos que desejo preenchidos..

Bem, parei por aqui, tenho feito de modo procedural o mostrar e salvar o form, ou seja, na view eu crio os campos, baseados no retorno do relacionamento, e na view que recebe os campos percorro e salvo em seus respectivos models...

Mas, tenho a leve impressão que esteja fazendo "no django Way".

Alguém tem alguma experiencia para trocar nesse quesito?





--
Lauro Cesar de Oliveira
http://www.gurulinux.blog.br
Hack to learn not learn to hack.

Guilherme Gondim

unread,
Mar 4, 2009, 11:30:54 PM3/4/09
to django...@googlegroups.com
Lauro Cesar de Oliveira <ola...@gmail.com>
writes:

> Criei um App para eu cadastrar os tipos de campos, se input
> text,password,textarea etc...
>
> Criei uma app para montar o formulario, onde dou um titulo para o formulario, e
> seleciono via ManyToMany os campos que desejo preenchidos..

Bom, aqui você não precisa de duas apps, mas apenas uma com dois Model,
não? Já que elas fazem parte de uma mesma aplicação de uso.

> Bem, parei por aqui, tenho feito de modo procedural o mostrar e salvar o form,
> ou seja, na view eu crio os campos, baseados no retorno do relacionamento, e na
> view que recebe os campos percorro e salvo em seus respectivos models...
>
> Mas, tenho a leve impressão que esteja fazendo "no django Way".
>
> Alguém tem alguma experiencia para trocar nesse quesito?

A verdade é que não entendi muito bem sua dúvida... mas também já é
madrugada. :-P De qualquer forma, se puder detalhar melhor pra gente...

--
Guilherme Gondim (semente)
http://semente.taurinus.org

Lauro Cesar de Oliveira

unread,
Mar 5, 2009, 6:29:00 AM3/5/09
to django...@googlegroups.com


2009/3/5 Guilherme Gondim <sem...@taurinus.org>


Lauro Cesar de Oliveira <ola...@gmail.com>
writes:

> Criei um App para eu cadastrar os tipos de campos, se input
> text,password,textarea etc...
>
> Criei uma app para montar o formulario, onde dou um titulo para o formulario, e
> seleciono via ManyToMany os campos que desejo preenchidos..

Bom, aqui você não precisa de duas apps, mas apenas uma com dois Model,
não? Já que elas fazem parte de uma mesma aplicação de uso.

Isso mesmo que fiz.
 

> Bem, parei por aqui, tenho feito de modo procedural o mostrar e salvar o form,
> ou seja, na view eu crio os campos, baseados no retorno do relacionamento, e na
> view que recebe os campos percorro e salvo em seus respectivos models...
>
> Mas, tenho a leve impressão que esteja fazendo "no django Way".
>
> Alguém tem alguma experiencia para trocar nesse quesito?

A verdade é que não entendi muito bem sua dúvida... mas também já é
madrugada. :-P  De qualquer forma, se puder detalhar melhor pra gente...


: )

Criei um gerador de formulários.

Mas o que eu queria era usar ModelForm.

Ou seja, os inputs/widgets são montados automaticamente apartir dos modelos relacionados via ManyToMany  no  modelo Formulario.

Estou estudando:

http://docs.djangoproject.com/en/dev/topics/forms/modelforms/

Mas se algum colega tem alguma dica.



--
Guilherme Gondim (semente)
http://semente.taurinus.org



Arthur Furlan

unread,
Mar 5, 2009, 6:49:26 AM3/5/09
to django...@googlegroups.com
Olá,

2009/3/5 Lauro Cesar de Oliveira <ola...@gmail.com>:
[...]


> Criei um gerador de formulários.
>
> Mas o que eu queria era usar ModelForm.
>
> Ou seja, os inputs/widgets são montados automaticamente apartir dos modelos
> relacionados via ManyToMany  no  modelo Formulario.

De acordo com o que você falou, o próprio ModelForm é um "gerador
de formulários".

> Estou estudando:
>
> http://docs.djangoproject.com/en/dev/topics/forms/modelforms/
>
> Mas se algum colega tem alguma dica.

Talvez esse link seja a melhor dica mesmo, continue estudando
sobre ModelForm's. Se eu entendi bem a sua dúvida, eles fazem
exatamente o que você quer.


--
Atenciosamente,

Arthur Furlan
arthur...@gmail.com

Miguel Silva

unread,
Mar 6, 2009, 9:18:48 AM3/6/09
to django...@googlegroups.com
Pelo q eu intendi o Lauro está tentando fazer um gerador de formularios mais ou menos igual ao forms do googledocs, onde o usuario pode criar formularios sem usar programação. E ele queria saber como adicionar um campo a um Form em tempo de execução, para montar os forms de acordo com os campos do banco.
Tambem estou interessado nisso pois penso em desenvolver uma aplicação igual ao google forms, para que os usuarios de meu sistema possam criar seus proprios formularios de pesquisas e enviar para as pessoas cadastradas no banco.

Miguel Antonio da Silva Junior.

2009/3/5 Arthur Furlan <arthur...@gmail.com>

Lauro Cesar de Oliveira

unread,
Mar 6, 2009, 10:15:59 AM3/6/09
to django...@googlegroups.com
Isso mesmo.

:  )



2009/3/6 Miguel Silva <mig...@iced3d.com>

Miguel Silva

unread,
Jun 25, 2009, 6:40:41 PM6/25/09
to django...@googlegroups.com
Ae Pessoal Blz!

Lauro como já faz tempo você provavelmente já descobriu uma forma de fazer isso, mas eu descobri forma bem interessante, e gostaria de compartilhar com o povo ae e ver se tem algum jeito ainda melhor de fazer.

Primeiro preencho um dicionario com os campos dinamicos:

    campos = {}
    campos['campo1'] = forms.CharField();
    campos['campo2'] = forms.IntegerField();
    campos['campo3'] = forms.BooleanField();

Depois crio o form dinamicamente usando o type():

    form = type('', (forms.Form,), campos)()


Quando for feito o post é só usar:

    form = type('', (forms.Form,), campos)(request.POST)


Fiquei sabendo desse type() acompanhando uma discussão muito interessante sobre closures na lista do python-brasil, basicamente ele cria classes dinamicamente.


2009/3/6 Lauro Cesar de Oliveira <ola...@gmail.com>



--
Miguel Antonio da Silva Junior.
mig...@iced3d.com


Reply all
Reply to author
Forward
0 new messages