Volver a la página principal
miércoles 16 octubre 2024
4

Cómo usar formularios en Django

Los forms en Django son herramientas que permiten crear y gestionar formularios HTML de manera eficiente, ya sea para capturar datos del usuario o para editar información de la base de datos. Django proporciona una API robusta para crear formularios, validarlos y procesar sus datos de manera sencilla.

¿Qué es un Form en Django?

Un Form en Django es una clase que define los campos de un formulario y su validación. Los formularios pueden ser utilizados tanto para manejar datos no relacionados con modelos, como para crear o actualizar instancias de un modelo de base de datos utilizando ModelForms.

Tipos de formularios en Django

1. Formularios normales (Forms): Se utilizan cuando necesitas procesar datos que no necesariamente están relacionados con un modelo.

2. Formularios basados en modelos (ModelForms): Simplifican la creación de formularios basados en los modelos, facilitando la creación y actualización de objetos en la base de datos.

Creación de un formulario en Django

Formulario básico

Para crear un formulario básico, defines una clase heredada de forms.Form, especificando los campos que necesitas.

Ejemplo:

from django import forms

class ContactForm(forms.Form):
    nombre = forms.CharField(max_length=100)
    email = forms.EmailField()
    mensaje = forms.CharField(widget=forms.Textarea)

Formulario basado en modelo (ModelForm)

Si el formulario está relacionado con un modelo, puedes usar un ModelForm, que simplifica el proceso.

Ejemplo:

from django import forms
from .models import Persona

class PersonaForm(forms.ModelForm):
    class Meta:
        model = Persona
        fields = ['nombre', 'edad', 'email']

Procesamiento de formularios en vistas

Para manejar un formulario, normalmente lo procesas dentro de una vista, verificando si es válido y procesando los datos.

Ejemplo en una vista basada en función:

from django.shortcuts import render
from .forms import ContactForm

def contacto(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # Procesar los datos del formulario
            nombre = form.cleaned_data['nombre']
            # Aquí iría la lógica para enviar un correo o guardar datos
    else:
        form = ContactForm()

    return render(request, 'contacto.html', {'form': form})

Validación de formularios

Django incluye validación automática para cada campo, y puedes agregar validaciones personalizadas con métodos como clean().

Ejemplo de validación personalizada:

class PersonaForm(forms.ModelForm):
    class Meta:
        model = Persona
        fields = ['nombre', 'edad']

    def clean_edad(self):
        edad = self.cleaned_data.get('edad')
        if edad < 18:
            raise forms.ValidationError("La edad debe ser mayor o igual a 18.")
        return edad

Algunos ejemplos

1. Mostrar un formulario en una plantilla:

<form method="POST">
       {% csrf_token %}
       {{ form.as_p }}
       <button type="submit">Enviar</button>
   </form>

2. Crear y procesar un ModelForm en una vista basada en clase:

from django.views.generic.edit import CreateView
   from .models import Persona
   from .forms import PersonaForm

   class PersonaCreateView(CreateView):
       model = Persona
       form_class = PersonaForm
       template_name = 'persona_form.html'

Referencia oficial

Para más detalles sobre formularios en Django, visita la documentación oficial de Django.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer