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.
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.
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.
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)
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']
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})
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
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'
Para más detalles sobre formularios en Django, visita la documentación oficial de Django.
Jorge García
Fullstack developer