In questa lezione modificheremo i file creati nella lezione precedente al fine di supportare la modifica e la cancellazione dei contatti.
Procediamo modificando il template index.html
in modo che contenga:
{% if lista_contatti %} <table> {% for cont in lista_contatti %} <tr> # ... <td><a href="/rubrica/{{ cont.id }}/form"> Modifica</a></td> <td><a href="/rubrica/{{ cont.id }}/cancella"> Cancella</a></td> </tr> {% endfor %} # ... {% else %} # ... {% endif %}
Notiamo come, rispetto alla precedente implementazione, sono stati aggiunti i link "Modifica" e "Cancella", il primo associato all'URL /rubrica/{{ cont.id }}/form
, il secondo a /rubrica/{{ cont.id }}/cancella
.
Aggiungiamo quindi questi indirizzi al mapping in primoprogetto/urls.py
:
urlpatterns = patterns('', # ... (r'^rubrica/(d+)/modifica/$', 'primoprogetto.rubrica.views.modifica'), (r'^rubrica/(d+)/form/$', 'primoprogetto.rubrica.views.form'), (r'^rubrica/(d+)/cancella/$', 'primoprogetto.rubrica.views.cancella'), )
Ora modifichiamo la funzione form
:
def form(request, contatto_id=None): if contatto_id is not None: cont = Contatto.objects.get(id=contatto_id) lista_telefoni = Telefono.objects.filter(contatto=contatto_id) lista_tipologia = Tipologia.objects.all() return render_to_response('form.html', {'cont':cont, 'lista_telefoni':lista_telefoni, 'lista_tipologia':lista_tipologia}) return render_to_response('form.html',{})
In questo modo tale funzione esegue una query sul database del contatto identificato da contatto_id
, dei telefoni associati al contatto e la lista delle tipologie di telefoni supportati e invia il dizionario contenente tali variabili al template form.html
.
Aggiungiamo a views.py
le funzioni che eseguono la modifica e la cancellazione di un contatto dalla rubrica:
def modifica(request,contatto_id): cont = Contatto.objects.get(id=contatto_id) cont.nome = request.POST['nome'] cont.cognome = request.POST['cognome'] cont.save() if type(request.POST['idTelefono'])==types.ListType: for idTel in request.POST['idTelefono']: tel = Telefono.objects.get(id=idTel) tel.numero= request.POST['numero'][request.POST['idTelefono'].index(idTel)] tel.tipologia_id= request.POST['tipotelefono'][request.POST['idTelefono'].index(idTel)] tel.save() else: tel = Telefono.objects.get(id=request.POST['idTelefono']) tel.numero= request.POST['numero'] tel.tipologia_id= request.POST['tipotelefono'] tel.save() lista_tipologia = Tipologia.objects.all() lista_telefoni = Telefono.objects.filter(contatto=contatto_id) return render_to_response('form.html', {'cont':cont,'lista_telefoni':lista_telefoni, 'lista_tipologia':lista_tipologia, 'error_message':'Modifica avvenuta con successo'}) def cancella(request,contatto_id): cont = Contatto.objects.get(id=contatto_id) cont.delete() lista_contatti=Contatto.objects.all().order_by('nome') return render_to_response('index.html', {'lista_contatti':lista_contatti})
Ora modifichiamo form.html
in modo che supporti la modifica del contatto:
{% block content %} # ... {% if cont %} <form action="/rubrica/{{ cont.id }}/modifica/" method="post"> <table> <tr><td>Nome:</td><td><input type="text" name="nome" value="{{ cont.nome }}"/></td></tr> <tr><td>Cognome:</td><td><input type="text" name="cognome" value="{{ cont.cognome }}"/></td></tr> {% for tel in lista_telefoni %} <tr> <input type="hidden" name="idTelefono" value="{{ tel.id }}" /> <td>Telefono:</td><td><input type="text" name="numero" value="{{ tel.numero }}" /></td> <td>Tipologia:</td> <td><select name="tipotelefono"> {% for tipologia in lista_tipologia %} {% ifequal tel.tipologia_id tipologia.id %} <option value="{{ tipologia.id}}" selected>{{ tipologia.descrizione }}</option> {% else %} <option value="{{ tipologia.id}}">{{ tipologia.descrizione }}</option> {% endifequal %} {% endfor %} </select> </td> </tr> {% endfor %} <tr><td><input type="submit" value="Salva"/></td></tr> </table> </form> {% else %} # ... {% endif %} <p>Torna alla <a href="/rubrica/">lista dei contatti</a></p> {% endblock %}
Infine apriamo il nostro browser e puntiamolo all'indirizzo http://127.0.0.1:8000/rubrica
, la schermata che ci appare è:
in cui ci sono i link Modifica e Cancella per ogni contatto.
Cliccando su Modifica appare la schermata seguente.
Cliccando su "Cancella" invece viene eliminato il relativo contatto e ricaricata la lista dei contatti.