L’eliminazione di un oggetto viene fatta attraverso una generic views molto simile a quella implementata da Django. E’ stato ovviamente ricreata per adattarla alle nostre esigenze.
La procedura generica prevedere la creazione di un’icona o comunque l’associazione di un link ad un url specifico che, una volta cliccato, aprira’ una popup con la richiesta di conferma dell’eliminazione e presentera’ anche una lista degli oggetti che, a cascata, saranno eliminati oltre all’oggetto stesso. Ad esempio, se si vuole cancellare un’anagrarfica, l’alert di conferma ti chiedera’ se si e’ sicuri dato che questo comportera’ anche l’eliminazione di tutti i suoi contatti/altri modelli associati.
Di seguito un esempio completo per la cancellazione di un anagrafica.
def get_del_icon(self, result):
return """<a href='%(reverse_url)s' onclick=\"jshowAddAnotherPopup(this, '%(window_title)s', 500, 500, 200, 200);return false;\">
<img src='%(url)simg/del.png' title=\"%(window_title)s\" /></a>""" % {
'reverse_url':reverse('organization-delete', result.id),
'url':settings.MEDIA_URL,
'window_title':_("Delete Organization")}
get_del_icon.short_description = _("Del")
Questo e’ un pezzo di codice ripreso dalla classe per la visualizzazione della lista dele anagrafiche. Questa funzione stampera’ a video un’icona con associato il link per la cancellazione dell’anagrafica.
Due i punti fondamentali su cui soffermarsi:
La presenza di un javascript che permette l’apertura della conferma in una nuova popup:
jshowAddAnotherPopup(this, '%(window_title)s', 500, 500, 200, 200);return false;
L’url della cancellazione avviene attraverso la funzione reverse di jumbo (from jumbo.core.urlresolvers import reverse).:
reverse('organization-delete', result.id)
Il nome ‘organization-delete’ deve essere una voce presente nelle urls
L’urls da chiamare per la cancellazione dell’oggetto sara’:
url(r'^del/(?P<object_id>\d+)/?$' , generic_delete_object, {'model': Organization}
, name='organization-delete'),
La cancellazione, come accennato sopra, sfrutta una generic views adattata alle nostre esigenze.
L’unico parametro obbligatorio che serve alla vista (oltre ovviamente all’object_id che gli viene passato in automatico) e’ model.
La funzione generic_delete_object si trova in:
from jumbo.views.generic.generic_views import generic_delete_object