A Django application for dynamic admin filters.
Project description
A django ModelAdmin Filter which adds advanced filtering abilities to the admin.
creating filters
using filters
Requirements
Django >= 4.0 on Python 3.9+/PyPy3
Installation & Set up
Run pip install django-dynamic-filters to install dynfilters.
Add “dynfilters” to your INSTALLED_APPS setting like this:
INSTALLED_APPS = [ ... 'adminsortable2', 'dynfilters', ]
Add “dynfilters” URL to your urls.py file:
urlpatterns = [ ... path('dynfilters/', include('dynfilters.urls')), ]
Run python manage.py migrate to create the dynfilters models.
Run python manage.py collectstatic to install the dynfilters media.
Integration Example
models.py
class Address(models.Model):
town = models.CharField(max_length=32)
class Person(models.Model):
first_name = models.CharField(max_length=32)
last_name = models.CharField(max_length=32)
birth_date = models.DateField()
address = models.ForeignKey(Address, on_delete=models.CASCADE)
admin.py
from dynfilters.filters import DynamicFilter
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
...
list_filter = (DynamicFilter,)
dynfilters_fields = [
'-',
'first_name',
'last_name',
('first_name|last_name', 'Name'), # Will generate: Q(first_name=<value>) | Q(last_name=<value>)
('birth_date', 'Date of birth'), # Requires the value to be: DD/MM/YYYY
'-',
('address__town', 'City'),
]
dynfilters_select_related = ['address'] # Optional
dynfilters_prefetch_related = [] # Optional
Operators & Lookups
The following operators and lookups are supported:
operators
OP_CHOICES = [
('-', '-'),
('!', 'NOT'),
('&', 'AND'),
('|', 'OR'),
('(', '('),
(')', ')'),
]
lookups
LOOKUP_CHOICES = [
('-', '---------'),
('=', 'Equals'),
('icontains', 'Contains'),
('istartswith', 'Starts with'),
('iendswith', 'Ends with'),
('in', 'One of'), # Requires the value to be: aaa,bbb,ccc
('-', '---------'),
('range', 'Date Range'), # Requires the value to be: DD/MM/YYYY,DD/MM/YYYY
('year', 'Date Year'),
('month', 'Date Month'),
('day', 'Date Day'),
('-', '---------'),
('isnull', 'Is NULL'),
('isnotnull', 'Is not NULL'),
('istrue', 'Is TRUE'),
('isfalse', 'Is FALSE'),
('-', '---------'),
('lt', 'Less Than'),
('gt', 'Greater Than'),
('lte', 'Less Than or Equal To'),
('gte', 'Greater Than or Equal To'),
]
Alternatives
Dynfilters was inspired by the look and feel of django-advanced-filters, but is based purely on admin forms and inlines (no JSON).
Another interesting package is django-filter.
And yet another one is django-admin-search-builder.
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-dynamic-filters-2.2.6.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | e59b120e7817f0cc86a33f733f245f7948037bc9d786c54c99bc512aae44f88c |
|
MD5 | f54ab8d90bc4ed30f8b215ae2530b501 |
|
BLAKE2b-256 | 3f6d9ee4c1d2d4b5eb1ffdf9dfbba1ee0766894fe43acdad4b6c995bc4745816 |
Hashes for django_dynamic_filters-2.2.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b97add7b5c3e610b6d1d3a23d0597e880d274067de055da0f3ec070fc9643ce2 |
|
MD5 | c0cac3264b33d77bf86991f84306c33b |
|
BLAKE2b-256 | 15496d2c1b367c62b646345d30f72cdbb37a8caf7176b3f71892d683b605a809 |