Skip to content

Filters

django_yp_admin.filters ships drop-in replacements for the popular django-filter and django-admin-rangefilter patterns. All filters are plain Django SimpleListFilter / FieldListFilter subclasses — they work in any ModelAdmin.list_filter.

Filters sidebar

A <select> instead of a vertical list of links:

from django_yp_admin.filters import DropdownFilter, ChoicesDropdownFilter


class StatusFilter(DropdownFilter):
    title = "status"
    parameter_name = "status"

    def lookups(self, request, model_admin):
        return Article.STATUS_CHOICES


class ArticleAdmin(ModelAdmin):
    list_filter = (StatusFilter, ("category", ChoicesDropdownFilter))

Variants: RelatedDropdownFilter (FK/M2M), FieldDropdownFilter (AllValues), ChoicesDropdownFilter (choices=).

MultiSelectFilter

Multi-value selection via __in. URL: ?tags=a&tags=b.

from django_yp_admin.filters import MultiSelectFilter


class TagFilter(MultiSelectFilter):
    title = "tags"
    parameter_name = "tags"

    def lookups(self, request, model_admin):
        return [(t.slug, t.name) for t in Tag.objects.all()]

DateRangeFilter / DateTimeRangeFilter / NumericRangeFilter

Paired __gte / __lte bounds, native <input type="date">, <input type="datetime-local">, <input type="number">. Invalid input is silently ignored (queryset returned unfiltered for that bound).

from django_yp_admin.filters import DateRangeFilter, NumericRangeFilter


class ArticleAdmin(ModelAdmin):
    list_filter = (
        ("created_at", DateRangeFilter),
        ("price", NumericRangeFilter),
    )

URL: ?created_at__gte=2024-01-01&created_at__lte=2024-12-31.