Default filter in Django admin Default filter in Django admin python python

Default filter in Django admin


In order to achieve this and have a usable 'All' link in your sidebar (ie one that shows all rather than showing pending), you'd need to create a custom list filter, inheriting from django.contrib.admin.filters.SimpleListFilter and filtering on 'pending' by default. Something along these lines should work:

from datetime import datefrom django.utils.translation import ugettext_lazy as _from django.contrib.admin import SimpleListFilterclass StatusFilter(SimpleListFilter):    title = _('Status')    parameter_name = 'status'    def lookups(self, request, model_admin):        return (            (None, _('Pending')),            ('activate', _('Activate')),            ('rejected', _('Rejected')),            ('all', _('All')),        )    def choices(self, cl):        for lookup, title in self.lookup_choices:            yield {                'selected': self.value() == lookup,                'query_string': cl.get_query_string({                    self.parameter_name: lookup,                }, []),                'display': title,            }    def queryset(self, request, queryset):        if self.value() in ('activate', 'rejected'):            return queryset.filter(status=self.value())            elif self.value() == None:            return queryset.filter(status='pending')class Admin(admin.ModelAdmin):     list_filter = [StatusFilter] 

EDIT: Requires Django 1.4 (thanks Simon)


class MyModelAdmin(admin.ModelAdmin):       def changelist_view(self, request, extra_context=None):        if not request.GET.has_key('decommissioned__exact'):            q = request.GET.copy()            q['decommissioned__exact'] = 'N'            request.GET = q            request.META['QUERY_STRING'] = request.GET.urlencode()        return super(MyModelAdmin,self).changelist_view(request, extra_context=extra_context)


Took ha22109's answer above and modified to allow the selection of "All" by comparing HTTP_REFERER and PATH_INFO.

class MyModelAdmin(admin.ModelAdmin):    def changelist_view(self, request, extra_context=None):        test = request.META['HTTP_REFERER'].split(request.META['PATH_INFO'])        if test[-1] and not test[-1].startswith('?'):            if not request.GET.has_key('decommissioned__exact'):                q = request.GET.copy()                q['decommissioned__exact'] = 'N'                request.GET = q                request.META['QUERY_STRING'] = request.GET.urlencode()        return super(MyModelAdmin,self).changelist_view(request, extra_context=extra_context)