A simple Django app to render list filters in django admin using autocomplete widget
Project description
Django Admin Autocomplete Filter
A simple Django app to render list filters in django admin using autocomplete widget. This app is heavily inspired from dal-admin-filters.
Overview:
Django comes preshipped with an admin panel which is a great utility to create quick CRUD's. The django 2.0 came with much needed autocomplete_fields which uses select2 widget that comes with a search feature that loads the options asynchronously. We can use this in django admin list filter.
Requirements:
Requires Django version >= 2.0
Installation:
You can install it via pip or to get the latest version clone this repo.
pip install django-admin-autocomplete-filter-faisal
Add admin_auto_filters
to your INSTALLED_APPS
inside settings.py of your project.
Usage:
Let's say we have following models:
class Artist(models.Model):
name = models.CharField(max_length=128)
class Album(models.Model):
name = models.CharField(max_length=64)
artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
cover = models.CharField(max_length=256, null=True, default=None)
And you would like to filter results in Album Admin on the basis of artist, then you can define search fields
in Artist and then define filter as:
from admin_auto_filters.filters import AutocompleteFilter
class ArtistFilter(AutocompleteFilter):
title = 'Artist' # display title
field_name = 'artist' # name of the foreign key field
class ArtistAdmin(admin.ModelAdmin):
search_fields = ['name'] # this is required for django's autocomplete functionality
...
class AlbumAdmin(admin.ModelAdmin):
list_filter = [ArtistFilter]
'''
defining this class is required for AutocompleteFilter
it's a bug and I am working on it.
'''
class Media:
pass
...
After following these steps you may see the filter as:
Now you can also register your custom view instead of using django admin's search_results to control the results in the autocomplete. For this you will need to create your custom view and register the url in your admin class as shown below:
In your views.py:
from admin_auto_filters.views import AutocompleteJsonView
class CustomSearchView(AutocompleteJsonView):
def get_queryset(self):
'''
your custom logic goes here.
'''
queryset = Artist.objects.all().order_by('name')
return queryset
After this, register this view in your admin class as:
class AlbumAdmin(admin.ModelAdmin):
list_filter = [ArtistFilter]
class Media:
pass
def get_urls(self):
urls = super().get_urls()
custom_urls = [
path('custom_search/', self.admin_site.admin_view(CustomSearchView.as_view(model_admin=self)),
name='custom_search'),
]
return custom_urls + urls
Finally just tell the filter class to use this new view as:
class ArtistFilter(AutocompleteFilter):
title = 'Artist'
field_name = 'artist'
def get_autocomplete_url(self, request, model_admin):
return reverse('admin:custom_search')
License:
Django Admin Autocomplete Filter is an Open Source project licensed under the terms of the GNU GENERAL PUBLIC LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django-admin-autocomplete-filter-faisal-0.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | c3ea1b321a8f9874866489d9819fcbc94424bd17909b939582536315a739a279 |
|
MD5 | a74baebc948e3eb57a5c4f330f7600d1 |
|
BLAKE2b-256 | 9d90f27cf922a5981a1858f16e15d5cc2ed82d397c34c155b29e17b9d06658cf |
Hashes for django_admin_autocomplete_filter_faisal-0.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b6997b1fcba284c4ee67766f24a02cfc5cea55b446327cff32edeeeec7ade7c3 |
|
MD5 | 10a0bf03f9fef6f2e4e627ff960dff9e |
|
BLAKE2b-256 | 14f526348b876f9fe784392703b681a5419a63028253fa9c8e35e815a25f087d |