jueves, 4 de abril de 2013

Tutorial Django: Formularios con base de datos II

En el anterior tutorial django Tutorial Django: Formularios con base de datos I lo que hicimos fue crear una tabla que cargaba todas las personas de la base de datos y un formulario que nos permitía añadir personas a esa tabla y base de datos. Ahora lo que vamos a hacer es a cada persona añadirle un enlace de editar y otro de eliminar.



Lo primero que vamos a hacer es irnos a nuestro archivo views.py y en él vamos a crear la vista para eliminar una persona. La vista quedará de la siguiente manera:



def eliminar_persona(request, id_persona):
    persona=Persona.objects.get(id=id_persona)
    persona.delete()
    return HttpResponseRedirect("/tabla")




Como verás lo que hace esta vista es recibir una id de persona, borra a la persona que tenga esa id y nos redirige a nuestra tabla.

Nos vamos a editar nuestro archivo tabla.html y agregamos una nueva columna llamada "Acciones" y en el bucle for le pondremos dos enlaces que conduzcan a una página borrar pasándo la id de persona que recibirá la vista para eliminarla



{% extends "miplantilla.html" %}

{% block titulo %} Tabla de personas {% endblock titulo %}


{% block contenido %}
<table border="1">
<thead>
<tr>
<th>Nombre</th>
<th>Edad</th>
<th>Aficion</th>
<th>Acciones</th>
</tr>
</thead>
<tbody>
{% for persona in personas %}
<tr>
<td>{{ persona.nombre }}</td>
<td>{{ persona.edad }}</td>
<td>{{ persona.aficion }}</td>
<td><a href="/editar/{{persona.id}}">Editar</a><br/><a href="/borrar/{{persona.id}}">Eliminar</a></td>
</tr>
{% empty %}
<tr><td colspan="4">No hay personas registradas</td></tr>
{% endfor %}
</tbody>
</table>

{% endblock contenido %}



Tan solo nos queda ir al archivo urls.py y crear la url:

 url(r'borrar/(?P<id_persona>\d+)$','aplicacion1.views.eliminar_persona'),



Si probamos nuestra aplicación en el navegador y pulsamos el botón eliminar de alguna persona, nos la eliminará.


El último paso es configurar la opción de editar. Para ello creamos una nueva vista que tendrá este aspecto:




def editar_persona(request, id_persona):
    persona=Persona.objects.get(id=id_persona)
    if request.method=="POST":
        formulario=FormularioPersonas(request.POST, instance=persona)
        if formulario.is_valid():
            formulario.save()
            return HttpResponseRedirect("/tabla")
    else:
        formulario = FormularioPersonas(instance=persona)
    return render_to_response("editar.html",{"formulario":formulario},context_instance=RequestContext(request))





tendremos que importar al principio del archivo:

from django.template import RequestContext



Crearemos ahora el archivo editar.html que tendrá esta estructura:


{% extends "miplantilla.html" %}

{% block titulo %} Editar persona {% endblock titulo %}


{% block contenido %}
<form method="POST">{% csrf_token %}

{{ formulario }}

<input type="submit" value="Editar" />

</form>

{% endblock contenido %}


Solo nos queda irnos a urls.py y agregar la nueva url:

   url(r'editar/(?P<id_persona>\d+)$','aplicacion1.views.editar_persona'),



Si ahora abrimos nuestra aplicación y pinchamos sobre editar en alguna persona, nos cargará el formulario con sus datos y si los modificamos y los confirmamos, tambien se cambiarán en la base de datos.






Parte 1.- Tutorial Django: Hola Mundo, primer proyecto y aplicación
Parte 2.- Tutorial Django: Crear plantillas
Parte 3.- Tutorial Django: Formularios con base de datos I
Parte 4.- Tutorial Django: Formularios con base de datos II

1 comentario:

  1. muy buena explicación, buen aporte!!!!
    gracias
    disculpa tal vez podrías hacer un tutorial de como agregar bootstrap a este mismo ejercicio......???

    ResponderEliminar