Menu
CoddyTech

Un formulario de Django

Parte de la sección Formularios del Journey de Django de Coddy. Lección 5 de 20.

Envías el formulario sin una fecha y el sitio falla: Django no puede convertir texto vacío en una fecha. Comprobar cada campo a mano requeriría código para cada campo y cada error.

Un formulario de Django describe los campos una sola vez, en forms.py, y cada campo sabe qué acepta. El formulario de reserva de un restaurante:

from django import forms


class BookingForm(forms.Form):
    name = forms.CharField(max_length=50)
    day = forms.DateField()
    guests = forms.IntegerField()

Todos los campos son obligatorios a menos que indiques lo contrario, y un CharField elimina primero los espacios, por lo que un nombre compuesto solo por espacios cuenta como vacío.

En la vista, crea el formulario con los datos recibidos y llama a is_valid(): comprueba cada campo y devuelve True o False. Después, form.cleaned_data contiene los valores convertidos a Python, así que cleaned_data["day"] es un datetime.date, no texto:

form = BookingForm(request.POST)
if form.is_valid():
    day = form.cleaned_data["day"]
challenge icon

Desafío

Fácil
  • En events/forms.py, escribe EventForm: title y place como texto de un máximo de 100 caracteres, y date como fecha.
  • En new_event, comprueba el POST con él. Si es válido, crea el evento a partir de los valores convertidos y redirige. Si no, muestra la página con error establecido en Please check the form.

Pulsa Ejecutar y envía el formulario sin fecha.

Pruébalo tú mismo

from django import forms

Todas las lecciones de Formularios

Practica por tu cuenta: Playground de Django