sabato 19 dicembre 2009

Django - delete logico

A dire il vero può essere scontato come fare... però visto che c'ho sbattuto la testa voglio condividere con i miei lettori questa 'soluzione soffritta' :) (restando in tema con il libro di Marco).

Creiamo un Model con override su 'delete':


class Customer(models.Model):
email = models.EmailField()
nickname = models.CharField(max_length=50)
deleted = models.BooleanField(default = False)

def delete(self):
self.deleted = True
self.save()


Poi in admin.py creiamo un ModelAdmin relativo al nostro 'Customer':


class CustomerAdmin(admin.ModelAdmin):
search_fields = ['nickname']
exclude = ('deleted',)

def queryset(self, request):
return super(CustomerAdmin, self).queryset(request).filter(deleted=False)


Fatto.
Ora nella vista in admin saranno presenti solamente i 'Customer' non cancellati logicamente, sia che venga mostrato l'elenco, sia che venga effettuata una ricerca.

Vi rimando per approfondimenti alla documentazione di Django e ad altri due link interessanti:
Django Trip: Ready, Set, Go
Is there a way to filter a queryset in the django admin?

Ho messo meno tempo a scrivere questo post che a trovar la soluzione! :D

Sani

Nessun commento: