Update day 16
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
parent
10e318cdc5
commit
9c43d3cad5
@ -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
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
<h1>Formulario de tareas</h1>
|
||||||
|
|
@ -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>
|
||||||
|
@ -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')
|
||||||
]
|
]
|
||||||
|
@ -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')
|
||||||
|
BIN
python-total/img/dia16_27.png
Normal file
BIN
python-total/img/dia16_27.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
Loading…
Reference in New Issue
Block a user