django-select2-admin-filters 0.1.4

Creator: codyrutscher

Last updated:

Add to Cart

Description:

djangoselect2adminfilters 0.1.4

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


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
INSTALLED_APPS = [
'django.contrib.admin',
#
'django_select2',
'django_select2_admin_filters',
]



Update urls.py to use model filters (refer to django-select2 documentation)
path('select2/', include('django_select2.urls')),



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

ChoiceFilter

ChoiceSelect2Filter
MultipleChoiceSelect2Filter


ModelFilter

ModelSelect2Filter
MultipleModelSelect2Filter



Usage

Use filter in your admin.py
from django.contrib import admin
from django_select2_admin_filters.admin import (
Select2AdminFilterMixin)
from 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',),
]


@admin.register(Person)
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



TODO

add tests
add handling dependent_fields

Author

Bartłomiej Żmudziński

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.