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.3.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab4e28261da42e6265dea08c087738eb439ff84577c9c61ca875e1911dce76e6 |
|
MD5 | c0d21b6bfc4f6c6c7aec8ae58799943b |
|
BLAKE2b-256 | 542e578e04624f73fb5cdc5663ae498fa904185b26d34c984f3453c0a61709be |
Hashes for django_admin_autocomplete_filter_faisal-0.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ee554cd8f8e54d19fffbcdf1c488c3deed46a39be433b09718406ea88c3fe99 |
|
MD5 | f45acd718105df3b5f81221c9bc6f785 |
|
BLAKE2b-256 | 0d249dc1b27e980033f44b9ee8756e095928dc9a99039bee39d92101e692cec8 |