6. Formularios y Validación
Django facilita enormemente el manejo de formularios, encargándose de la renderización HTML, la validación de datos y la conversión a objetos Python.
Tipos de Formularios
- Form: Formularios genéricos que no están directamente vinculados a un modelo.
- ModelForm: Formularios que se crean automáticamente a partir de un modelo existente.
Creando un ModelForm
Definimos nuestros formularios en forms.py.
from django import forms
from .models import Curso
class CursoForm(forms.ModelForm):
class Meta:
model = Curso
fields = ['titulo', 'descripcion', 'fecha_inicio']
widgets = {
'fecha_inicio': forms.DateInput(attrs={'type': 'date'}),
}
Validación Personalizada
Podemos añadir reglas de validación específicas sobrescribiendo el método clean_<campo>.
from django.core.exceptions import ValidationError
def clean_titulo(self):
titulo = self.cleaned_data.get('titulo')
if titulo.isupper():
raise ValidationError("El título no puede estar todo en mayúsculas.")
return titulo
Usando Formularios en Vistas (CreateView)
Las CBVs como CreateView y UpdateView se integran perfectamente con los formularios.
class CursoCreateView(CreateView):
model = Curso
form_class = CursoForm
template_name = "curso_form.html"
success_url = '/cursos/'
Renderizado en Plantillas
Django ofrece métodos rápidos para renderizar formularios:
* {{ form.as_p }}: Cada campo en un párrafo <p>.
* {{ form.as_table }}: Como filas de tabla <tr>.
* {{ form.as_ul }}: Como lista <li>.
Para mayor control, puedes iterar sobre los campos:
{% for field in form %}
<label>{{ field.label }}</label>
{{ field }}
{{ field.errors }}
{% endfor %}