Skip to main content

A simple extension to Django app to render filters in django admin panel as autocomplete widget.

Project description


This extension is based on django-select2 and works with or without Grappelli.


  • Install using pip

    pip install django-select2-admin-filters
  • Update INSTALLED_APPS, you need too put django_select2_admin_filters after admin and django_select2

  • Update to use model filters (refer to django-select2 documentation)

    path('select2/', include('django_select2.urls')),


Filters are generally of two types, but each of them can be single or multiple selectable:

  • ChoiceFilter
    • ChoiceSelect2Filter
    • MultipleChoiceSelect2Filter
  • ModelFilter
    • ModelSelect2Filter
    • MultipleModelSelect2Filter


  • Use filter in your
      from django.contrib import admin
      from libs.django_select2_admin_filters.admin import (
      from libs.django_select2_admin_filters.filters import (
          ChoiceSelect2Filter, MultipleChoiceSelect2Filter,
          ModelSelect2Filter, MultipleModelSelect2Filter)
      from your_app.models import Country, Person, Profession
      class CountryFilter(ModelSelect2Filter):
          title = 'Country of residence'                 # filter's title
          parameter_name = 'country'                     # parameter used in url and by default field name of Foreign Key used to filter results
          autocomplete_queryset = Country.objects.all()  # queryset to autocomplete
          search_fields = ['name__icontains']            # fields of Country model used to filtering
          # optionally you can override queryset method
          def queryset(self, request, queryset):
              val = self.value()
              if val:
                  return queryset.filter(country_of_residence=val)
              return queryset
      class ProfessionFilter(MultipleModelSelect2Filter):
          title = 'Profession'
          parameter_name = 'profession'
          autocomplete_queryset = Profession.objects.all()
          search_fields = ['name__icontains']
          def queryset(self, request, queryset):
              val = self.value_as_list()
              if len(val) > 0:
                  return queryset.filter(professions__profession_id__in=val)
              return queryset
      class StatusFilter(ChoiceSelect2Filter):
          title = 'Status'
          parameter_name = 'status'
          autocomplete_choice_list = [    # list of choices
              (1, 'Active',),
              (2, 'Suspended',),
              (3, 'Deleted',),
      class PersonAdmin(Select2AdminFilterMixin, admin.ModelAdmin):
          # change_list_template = 'admin/change_list_filter_sidebar.html' <- DON'T override change_list_template
          list_filter = (CountryFilter, ProfessionFilter, StatusFilter,) # actually you cannot mix filters with traditional filters


  • add tests
  • add handling dependent_fields


Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-select2-admin-filters, version 0.1.1
Filename, size File type Python version Upload date Hashes
Filename, size django_select2_admin_filters-0.1.1-py2-none-any.whl (6.4 kB) File type Wheel Python version py2 Upload date Hashes View
Filename, size django-select2-admin-filters-0.1.1.tar.gz (4.3 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page