The Easiest Way to Save and Share Code Snippets on the web

SoftDeleteModelAdmin

python | by: dArignac

posted: Aug, 2nd 2010 | jump to bottom

## The ModelAdmin class for classes with SoftDelete behaviour
class SoftDeleteModelAdmin(admin.ModelAdmin):
    def queryset(self, request):
        if request.user.is_superuser:
            qs = self.model._default_manager.all_with_deleted()
        else:
            qs = self.model._default_manager.all()
        ordering = self.ordering or ()
        if ordering:
            qs = qs.order_by(*ordering)
        return qs
 
    ## If a specific record was requested, return it even if it's deleted
    def get(self, *args, **kwargs):
        return self.all_with_deleted().get(*args, **kwargs)
 
    ## If pk was specified as a kwarg, return even if it's deleted
    def filter(self, *args, **kwargs):
        if 'pk' in kwargs:
            return self.all_with_deleted().filter(*args, **kwargs)
        return self.get_query_set().filter(*args, **kwargs)
 
57 views