Vamos a crear un CRUD para nuestra app tienda.
Con todo lo que hemos visto, ya podemos dar este paso.
Ya vimos el C y el R del CRUD:
Ahora vamos por el U y el D:
Para actualizar un registro existente, podemos usar el formulario que hemos creado.
Además, podemos instanciar un objeto de nuestra base de datos para indicarle a Django que estamos editando un registro.
Entonces, en views.py
de nuestra app tienda, generamos una vista para controlar la edición:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Pudimos haber usado la vista
crear
pero es mejor dividir para conquistar.
Ahora, registramos en urls.py
:
1 2 3 4 |
|
Y ahora, al ir a, por ejemplo, http://127.0.0.1:8000/editar/martillo-de-cristal/, podemos ver que el formulario se autocompleto con los datos correspondientes al objeto producto con ese slug.
Si editamos un campo y clicamos el botón Submit
, deberíamos ver que nuestro producto fue modificado.
Nótese que, si cambiamos el nombre, nuestro formulario sobrescribirá el
slug
y esta url dejaría de ser valida.
Una solución es verificar que si un objeto ya está guardado, elslug
no se pueda modificar.
Esto se puede realizar modificando el métodosave()
nuevamente.
En https://stackoverflow.com/a/21756188 hay una respuesta a este problema...
Entonces, el metodosave()
de nuestro modeloproducto
quedaría:
1 2 3 4 5 6 |
|
El campo
pk
devolveráNone
si la instancia no tiene un objeto dentro de la base de datos.
El eliminar es más sencillo...
Creamos una vista llamada eliminar
que aceptara una uid
.
1 2 3 4 5 6 7 8 |
|
Nótese que, por lógica, si eliminamos el producto y luego mostramos el mensaje, se generara un error, ya que el objeto no existe.
Luego, registramos la vista en urls.py
:
1 2 3 4 |
|
Y ya está. Al navegar a http://127.0.0.1:8000/eliminar/filorte/, el objeto filorte
será eliminado.