diff --git a/python-total/dia_16/README.md b/python-total/dia_16/README.md index eeb2398..1980429 100644 --- a/python-total/dia_16/README.md +++ b/python-total/dia_16/README.md @@ -512,9 +512,60 @@ Y así la vista en el navegador: ![](../img/dia16_26.png) - ## 16.9. - Agregar nueva tarea +Seguimos editando base/views.ppy y base/urls.py. En views.py importamos una clase más: +```python +from django.views.generic.detail import DetailView +``` + +Creamos la clase CreaTarea que tendrá una lógica un poco más compleja porque el sistema que recoja un pedido que creará un nuevo elemento que se incluirá en la lista. Esta clase tomará un formulario por defecto de models.py basados en los campos que incluimos. + +Se puede incluir en la clase una lista con todos los elementos que queremos en el formulario: +```python +fields= ['titulo', 'descripcion', 'completo', 'creado'] +``` + +Pero en este caso queremos todos los campos, así que utilizaremos +```python +fields= '__all__' +``` +Y para asegurarnos que cuando se envíe el formulario con éxito el usuario vaya a otra página distinta tenemos que importar otra herramienta: +```python +from django.urls import reverse_lazy +``` + +reverse_lazy se ocupa de redirigir la página cuando encuentre el evento que se le indique. Cargamos la url donde se redirige con success_url +```python +success_url = reverse_lazy('tareas') +``` + +De nuevo, tendremos que añadir la nueva página en el fichero urls.py, importando la clase y añadiendo el path. Quedando el documento así: +```python +from django.urls import path +from .views import ListaPendientes, DetalleTarea, CrearTarea + +urlpatterns = [ + path('', ListaPendientes.as_view(), name='pendientes'), + path('tarea/', DetalleTarea.as_view(), name='tarea'), + path('crear-tarea/', CrearTarea.as_view(), name='crear-tarea') +] +``` + +Ahora necesitaremos un nuevo fichero html en templates que le llamaremos tarea_form.html que es el nombre por defecto. Para las pruebas tan solo ponemos un título: +```html +

Formulario de tareas

+``` + +Y por último, para que la página principal tenga un enlace que redirija a la página nueva, tendremos que editar tareas_list.html añadiendo este fragmento de código html: +```html +Crear nueva tarea +``` + +Ahora ya podemos ver el enlace que nos lleva a la nueva página creada: + +![](../img/dia16_27.png) + ## 16.10. - Formulario para nueva tarea ## 16.11. - Editar tarea diff --git a/python-total/dia_16/mi_web/src/proyecto/base/templates/base/tarea_form.html b/python-total/dia_16/mi_web/src/proyecto/base/templates/base/tarea_form.html new file mode 100644 index 0000000..ff8618b --- /dev/null +++ b/python-total/dia_16/mi_web/src/proyecto/base/templates/base/tarea_form.html @@ -0,0 +1,2 @@ +

Formulario de tareas

+ diff --git a/python-total/dia_16/mi_web/src/proyecto/base/templates/base/tarea_list.html b/python-total/dia_16/mi_web/src/proyecto/base/templates/base/tarea_list.html index 299e11f..4036698 100644 --- a/python-total/dia_16/mi_web/src/proyecto/base/templates/base/tarea_list.html +++ b/python-total/dia_16/mi_web/src/proyecto/base/templates/base/tarea_list.html @@ -1,5 +1,7 @@

Lista de pendientes

+Crear nueva tarea + diff --git a/python-total/dia_16/mi_web/src/proyecto/base/urls.py b/python-total/dia_16/mi_web/src/proyecto/base/urls.py index b899125..75d2b1c 100644 --- a/python-total/dia_16/mi_web/src/proyecto/base/urls.py +++ b/python-total/dia_16/mi_web/src/proyecto/base/urls.py @@ -1,8 +1,9 @@ from django.urls import path -from .views import ListaPendientes, DetalleTarea +from .views import ListaPendientes, DetalleTarea, CrearTarea urlpatterns = [ path('', ListaPendientes.as_view(), name='pendientes'), - path('tarea/', DetalleTarea.as_view(), name='tarea') + path('tarea/', DetalleTarea.as_view(), name='tarea'), + path('crear-tarea/', CrearTarea.as_view(), name='crear-tarea') ] diff --git a/python-total/dia_16/mi_web/src/proyecto/base/views.py b/python-total/dia_16/mi_web/src/proyecto/base/views.py index da92ce4..06de421 100644 --- a/python-total/dia_16/mi_web/src/proyecto/base/views.py +++ b/python-total/dia_16/mi_web/src/proyecto/base/views.py @@ -1,6 +1,8 @@ from django.shortcuts import render from django.views.generic.list import ListView from django.views.generic.detail import DetailView +from django.views.generic.edit import CreateView +from django.urls import reverse_lazy from .models import Tarea # Create your views here. @@ -15,3 +17,9 @@ class DetalleTarea(DetailView): model = Tarea context_object_name = 'tarea' template_name = 'base/tarea.html' + + +class CrearTarea(CreateView): + model = Tarea + fields = '__all__' + success_url = reverse_lazy('tareas') diff --git a/python-total/img/dia16_27.png b/python-total/img/dia16_27.png new file mode 100644 index 0000000..4fd8407 Binary files /dev/null and b/python-total/img/dia16_27.png differ
Elementos