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.
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: