Ejercicio: Implementación de vistas genéricas para editar datos
Para permitir que los usuarios registren nuevos perros en un refugio, usaremos CreateView
.
Actualización del modelo para admitir get_absolute_url
Comencemos por actualizar el modelo para que sea compatible con get_absolute_url
.
En Visual Studio Code, abra dog_shelters/models.py.
Agregue el código siguiente debajo de la línea que lee
# TODO: Import reverse
para importar la funciónreverse
.# TODO: Import reverse from django.urls import reverse
Agregue el código siguiente a la clase
Dog
inmediatamente en la línea que lee# TODO: Add get_absolute_url
para leer la ruta dog_detail de URLconf y pasar el identificador como parámetro.# TODO: Add get_absolute_url def get_absolute_url(self): return reverse('dog_detail', kwargs={"pk": self.pk})
Importante
Recuerde que Python administra los contenedores con tabulaciones en lugar de llaves ({ }
). Debido a este hecho, get_absolute_url
debe estar en el mismo nivel de tabulación que el comentario #TODO
. Puede hacer referencia a los archivos del directorio solution para ver el proyecto completado.
Creación de DogCreateView
Vamos a crear DogCreateView
para permitir que alguien pueda registrar un perro.
En Visual Studio Code, abra dog_shelters/views.py.
Al final de views.py, agregue el código siguiente para crear
DogCreateView
.class DogCreateView(generic.CreateView): model = models.Dog template_name = 'dog_form.html' fields = ['shelter', 'name', 'description']
Establecemos el modelo para que sea Dog
, nuestra plantilla para que sea adog_form.html y la lista de campos que queremos que se puedan editar.
Nota:
El orden en que se enumeran los campos será el orden en que se mostrarán en el formulario.
Registro de la ruta
Una vez creada la vista, registraremos la ruta en nuestro elemento URLconf.
En Visual Studio Code, abra dog_shelters/urls.py.
Debajo de la línea que lee
# TODO: Register create view
, agregue el código siguiente para registrar la ruta.# TODO: Register create view path('dog/register', views.DogCreateView.as_view(), name='dog_register'),
Creación de la plantilla HTML
Vamos a crear la plantilla para hospedar nuestro formulario.
En Visual Studio Code, cree un archivo dentro de dog_shelters/templates denominado dog_form.html.
Agregue el código siguiente a dog_form.html para crear la plantilla que hospedará el formulario.
{% extends 'base.html' %} {# TODO: Register crispy_forms_tags #} {% block title %} Register dog at shelter {% endblock %} {% block content %} <h2>Register dog at shelter</h2> <form method="POST"> {% csrf_token %} {{ form.as_p }} <button type="submit" class="btn btn-primary">Save</button> </form> {% endblock %}
Nota:
Vamos a agregar una nota para nosotros mismos a fin de agregar una biblioteca, que haremos en el ejercicio siguiente.
Creación de un vínculo a la página de registro
Vamos a crear un vínculo en nuestra página de lista de refugios, que actualmente es la página principal de nuestra aplicación, a la página de registro que hemos creado.
En Visual Studio Code, abra dog_shelters/templates/shelter_list.html.
Debajo de la línea que lee
{# TODO: Add link to registration page #}
, agregue el código siguiente para crear el vínculo.{# TODO: Add link to registration page #} <div> <a href="{% url 'dog_register' %}">Register a dog available for adoption</a> </div>
Prueba de la página
Veamos la página en acción.
Guarde todos los archivos; para ello, seleccione Archivo>Guardar todo.
En el explorador, vaya a
http://localhost:8000
.Seleccione Register a dog available for adoption (Registrar un perro disponible para su adopción).
Ahora debería ver el formulario.
Observe cómo nuestra relación de clave externa se convierte en una lista desplegable.
Elija un refugio y agregue un nombre y una descripción para un perro.
Seleccione Guardar.
Ahora se le redirigirá a la página de detalles del perro.
Ya ha creado un formulario de creación mediante CreateView
en Django.