Filters
All filters extend django-filter and live in pragmatic.filters.
SliderFilter
Integrates SliderField with django-filter. Supports single-value and
range filtering. Optionally loads min/max/distribution data from the database
and caches it.
import django_filters
from pragmatic.filters import SliderFilter
class ProductFilter(django_filters.FilterSet):
price = SliderFilter(
field_name='price',
min_value=0,
max_value=500,
step=5,
has_range=True,
appended_text='€',
# Optional: auto-compute min/max/distribution from the DB
segment='myapp.Product.price',
count=20, # number of histogram segments
queryset_method='all', # manager method to call
)
class Meta:
model = Product
fields = ['price']
The segment argument takes an 'app_label.ModelName.field_name' string.
On first use, it queries the database for min, max, and a count
distribution across count equal-width buckets, then caches the result for
24 hours (86 400 s).
Note
When has_range=True the filter applies field__gte for value.start
and field__lte for value.stop. For single-value mode it delegates to
the parent filter with the configured lookup_expr (default: 'lte').
OneFieldRangeFilter
Uses RangeField to filter with a single start-stop text input.
from pragmatic.filters import OneFieldRangeFilter
class OrderFilter(django_filters.FilterSet):
quantity = OneFieldRangeFilter(field_name='quantity')
Applies field__range=(start, stop).
TruncatedModelChoiceFilter
Filter field backed by TruncatedModelChoiceField. Drop-in replacement
for django_filters.ModelChoiceFilter when labels need truncation.
from pragmatic.filters import TruncatedModelChoiceFilter
class InvoiceFilter(django_filters.FilterSet):
customer = TruncatedModelChoiceFilter(
queryset=Customer.objects.all(),
truncate_chars=40,
)
ArrayFilter
Filters a PostgreSQL ArrayField by checking whether a given value is
contained in the array. Also checks indexed positions up to array_size.
from pragmatic.filters import ArrayFilter
class ArticleFilter(django_filters.FilterSet):
tag = ArrayFilter(field_name='tags', array_size=10)
IntegerFilter
A NumberFilter that enforces an integer IntegerField form field.
from pragmatic.filters import IntegerFilter
class StockFilter(django_filters.FilterSet):
quantity = IntegerFilter(field_name='quantity', lookup_expr='gte')
PositiveBooleanFilter
A BooleanFilter that passes the queryset through unchanged when the value
is falsy (i.e. only filters when True).
from pragmatic.filters import PositiveBooleanFilter
class ArticleFilter(django_filters.FilterSet):
is_featured = PositiveBooleanFilter(field_name='is_featured')