[Django-es] Diferencia entre forms.ModelForm y forms.Form

968 views
Skip to first unread message

Derlis Ysidro Garcete Aguiolar

unread,
Apr 29, 2010, 4:19:46 PM4/29/10
to djan...@googlegroups.com
Hola a todos!!!. Estoy haciendo un formulario a partir de un modelo. Para ello creé el archivo forms.py que contiene los form de mis modelos. El problema que tengo es, que cuando creo el form del modelo,por ejemplo class ProyectoForm(forms.ModelForm), y le paso como argumento el forms.ModelForm cuando llamo al template, en el mismo, me aparecen dos veces todos los campos que tengo que rellenar. Pero si en ves de enviar como argumento el forms.ModelForm envio forms.Form en el template me aparecen correctamente los campos que yo quiero que aparezcan (solamente una ves) pero si hago de esta forma cuando quiero guardar el, form from.save(), me sale un error que dice que el form no tiene un metodo save y con el otro no (forms.ModelForm) no sale este error. Espero la ayuda de ustedes para solucionar el problema. Saludos.

--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.

Ramiro Morales

unread,
Apr 29, 2010, 4:46:12 PM4/29/10
to djan...@googlegroups.com
2010/4/29 Derlis Ysidro Garcete Aguiolar <der...@gmail.com>:
> cuando creo el form del modelo,por ejemplo class
> ProyectoForm(forms.ModelForm), y le paso como argumento el forms.ModelForm

Eso de "le paso como argumento el forms.ModelForm" no se entiendió bien.

Creo que lo mejor sería que generes un pequeño ejemplo de código de lo que
estas haciendo. Eso siempre es mejor que un largo párrafo describiendo
el problema.

Cuando digo pequeño me refiero a un extracto de tu código que se limite al
problema que estas tratando de solucionar no una copia idéntica completa de tu
forms.py y tu models.py con todos los campos porque eso puede ser ilegible para
alguien que no esta compenetrado con tu proyecto.

Atentamente,

--
Ramiro Morales | http://rmorales.net

Juan Pablo Martínez

unread,
Apr 29, 2010, 8:28:01 PM4/29/10
to djan...@googlegroups.com
Hay que separar lo que es un ModelForm y un Form

Los Form son clases que sirven para definir formularios custom 
Por ejemplo necesito un formulario de contacto
entonces me creo un

class Contacto(forms.Form):
   nombre = forms.charfield....
   apellido = forms.charfield
   etc, etc

pero Que pasa si esa "estructura" ya la tengo definida en un modelo?
como puede ser un modelo

class Contacto(models.Model):
   nombre = models.charfield....
   apellido = models.charfield
   etc, etc

Seria "no respetar" una de las leyes de python de "no te repitas".
Es por ese detalle que se crea un clase "wrapper" de modelos para crear forms
Esa se llama ModelForms, y sirven para utilizar y aprobechar la definicion del
esquema de un Model y crear un Form a partir de el sin necesidar de volver
a describirlo.

from models import Contacto

class Contacto(ModelForm):
    model = Contacto

ModelForm tiene dentro logica que inspecciona el modelo asociado
y crea los fields que necesite para mostrarse.

Creo que la cosa viene por esa confusion.
Pensa los ModelForm como un formulario Form de un Model que definiste
y a un Form como un formulario que espera puede ser cualquier cosa aparte de un Model.

Igualmente, como dice Ramiro es mejor si se pone codigo para saber bien de que se trata el asunto :)

Saludos, 
--
:: juanpex

Reply all
Reply to author
Forward
0 new messages