Manejo de formularios en Django (Primera Parte)
- Mediante el manejo de formularios de Django, ahorramos mucho código, y el tiempo perdido que implica escribirlo, tanto a la hora de diseñarlo como cuando hay que mostrarlo en las templates.
- Especialmente útil cuando tenemos que trabajar con formularios relativamente grandes.
Una vez más Django acude a salvarnos la vida, esta vez, mediante el manejo de formularios. A nadie le gusta tener que meter a mano todos los campos dentro de un form al estilo de:
cuando tienes la opción de, simplemente, sustituirlo por
{{ form }}
Imaginemos que queremos realizar un formulario que interactúe con la siguiente clase:
class ExampleUser(models.Model):
user = models.ForeignKey(User,unique=True)
email = models.EmailField(max_length=40,blank=False,unique=True)
edad = models.IntegerField(blank=False, null=False, default=333)
El caso más sencillo sería desarrollar nuestro propio formulario en python, en un fichero llamado forms.py.
Lo primero de todo es importar los formularios de django, y la clase de la que queremos realizar un formulario.
from django import form. from example.models import ExampleUser
Y después programar el formulario en sí (en este ejemplo queremos interactuar con el email y la edad de un usuario dado).
class ExampleUserForm(forms.Form):
email = forms.EmailField(max_length=40, required=True)
edad = forms.IntegerField(required=False)
Este ejemplo es sencillo, y se ve a simple vista la facilidad y potencia que nos otorga Django, pero imaginemos que en lugar de ser una clase con dos ó tres campos, es una clase con cuarenta (o con doscientos). Si no necesitamos realizar grandes alteraciones sobre los campos del modelo (lo que es en el modelo, va a ser en el formulario) podemos echar mano de los modelforms, con lo que nuestra clase quedaría del siguiente modo:
class ExampleUserForm(forms.ModelForm):
class Meta:
model = ExampleUser
En este caso, y sin necesidad de dar más indicaciones, tenemos un formulario con un campo propio por cada uno del modelo asignado. Además podemos añadir o quitar los que necesitemos:
class ExampleUserForm(forms.ModelForm):
num_hermanos = forms.IntegerField(required=False)
class Meta:
model = ExampleUser
exclude = ('edad',)
De este modo, se añade al formulario un nuevo atributo para obtener el número de hermanos y excluimos la edad.
Dentro de la vista simplemente tendríamos que importar el formulario y la clase
from example.models import ExampleUser
from example.forms import ExampleUserForm
def example_view(request):
if request.method == 'POST':
form = ExampleUserForm(request.POST)
...
else:
form = ExampleUserForm()
...
render_template(template, {'form':form})
Como podemos observar, si el método es una POST, la enviamos directamente al formulario, que se encargará de tratarla con sus métodos internos (como veremos en la segunda parte de este artículo). Y en caso contrario, enviamos el formulario "virgen" a la template. Podemos, en caso de necesitarlo, pasarle un diccionario al campo initial con los valores que necesitemos que se muestren inicialmente:
form = ExampleUserForm(initial {'edad': 16})
Ahora simplemente tendríamos que mostrarlo en nuestra template. Para ello disponemos de varias formas de hacerlo, en función de lo que necesitemos.
Mostraría el formulario tal cual (con los labels que hayamos configurado, si no hemos configurado ninguno, con el nombre del atributo)
Lo mostraría con forma de tabla.
Lo mostraría de una forma mucho más detallada.
Además, los formularios de django también disponen de tratamiento de errores, pero eso se queda para la segunda parte de este artículo.
Dispones de más información al respecto en la documentación oficial de Django.




¡Ey! Nos gustaría saber qué piensas sobre este tema. ¡Dejar un comentario no cuesta nada!
Dejar un comentario
Por favor, asegúrate de que has rellenado todos los campos obligatorios (*).