Update day 16

Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
Manuel Vergara 2023-05-21 21:33:13 +02:00
parent 10e318cdc5
commit 9c43d3cad5
6 changed files with 67 additions and 3 deletions

View File

@ -512,9 +512,60 @@ Y así la vista en el navegador:
![](../img/dia16_26.png) ![](../img/dia16_26.png)
## 16.9. - Agregar nueva tarea ## 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/<int:pk>', 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
<h1>Formulario de tareas</h1>
```
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
<a href="{% url 'crear-tarea' %}">Crear nueva tarea</a>
```
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.10. - Formulario para nueva tarea
## 16.11. - Editar tarea ## 16.11. - Editar tarea

View File

@ -0,0 +1,2 @@
<h1>Formulario de tareas</h1>

View File

@ -1,5 +1,7 @@
<h1>Lista de pendientes</h1> <h1>Lista de pendientes</h1>
<a href="{% url 'crear-tarea' %}">Crear nueva tarea</a>
<table> <table>
<tr> <tr>
<th>Elementos</th> <th>Elementos</th>

View File

@ -1,8 +1,9 @@
from django.urls import path from django.urls import path
from .views import ListaPendientes, DetalleTarea from .views import ListaPendientes, DetalleTarea, CrearTarea
urlpatterns = [ urlpatterns = [
path('', ListaPendientes.as_view(), name='pendientes'), path('', ListaPendientes.as_view(), name='pendientes'),
path('tarea/<int:pk>', DetalleTarea.as_view(), name='tarea') path('tarea/<int:pk>', DetalleTarea.as_view(), name='tarea'),
path('crear-tarea/', CrearTarea.as_view(), name='crear-tarea')
] ]

View File

@ -1,6 +1,8 @@
from django.shortcuts import render from django.shortcuts import render
from django.views.generic.list import ListView from django.views.generic.list import ListView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView
from django.urls import reverse_lazy
from .models import Tarea from .models import Tarea
# Create your views here. # Create your views here.
@ -15,3 +17,9 @@ class DetalleTarea(DetailView):
model = Tarea model = Tarea
context_object_name = 'tarea' context_object_name = 'tarea'
template_name = 'base/tarea.html' template_name = 'base/tarea.html'
class CrearTarea(CreateView):
model = Tarea
fields = '__all__'
success_url = reverse_lazy('tareas')

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB