Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Modifica e cancellazione dei contatti

Aggiungiamo le funzionalità di modifica e cancellazione lavorando sui file già creati
Aggiungiamo le funzionalità di modifica e cancellazione lavorando sui file già creati
Link copiato negli appunti

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 è:

Figura 12. Elenco contatti con le nuove opzioni
Elenco contatti con le nuove opzioni

in cui ci sono i link Modifica e Cancella per ogni contatto.

Cliccando su Modifica appare la schermata seguente.

Figura 13. Modifica contatto
Modifica contatto

Cliccando su "Cancella" invece viene eliminato il relativo contatto e ricaricata la lista dei contatti.

Ti consigliamo anche