Skip to main content

A Django application for dynamic admin filters.

Project description

Package License Downloads Python Django

A django ModelAdmin Filter which adds advanced filtering abilities to the admin.

creating filters

Creating a filter

using filters

Apply a filter

Requirements

Installation & Set up

  1. Run pip install django-dynamic-filters to install dynfilters.

  2. Add “dynfilters” to your INSTALLED_APPS setting like this:

    INSTALLED_APPS = [
        ...
        'adminsortable2',
        'dynfilters',
    ]
  3. Add “dynfilters” URL to your urls.py file:

    urlpatterns = [
        ...
        path('dynfilters/', include('dynfilters.urls')),
    ]
  4. Run python manage.py migrate to create the dynfilters models.

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',             # 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'),
]

Sharing

There are two ways dynamic filters can be shared:

  1. By marking a filter global. The filter will then be available to all admin users.

  2. By pressing the share icon. The filter will then be shared by email. When the recipients clicks on the received link, a copy of the filter will be created. The edits made to the copy will not affect the original filter.

Alternatives

Project details


Download files

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

Source Distribution

django-dynamic-filters-2.2.1.tar.gz (13.7 kB view hashes)

Uploaded Source

Built Distribution

django_dynamic_filters-2.2.1-py3-none-any.whl (18.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page