Filtering FormsΒΆ
siteforms
allows you to use form a filter applied to a query set.
Use FilteringForm
or FilteringModelForm
.
from siteforms.composers.bootstrap5 import Bootstrap5
from siteforms.toolbox import FilteringModelForm
# Let's suppose we want to filter articles we have in our database.
# Among others fields Article model has `title` and `status`
# we want our articles to be filtered by.
# We inherit our form from FilteringModelForm.
class MyFilterForm(FilteringModelForm):
...
# If you have custom form fields, you may want
# to map those fields to model field names:
lookup_names = {
'date_from': 'date',
'date_till': 'date',
}
# Or you can have special lookups for certain fields:
filtering = {
'field1': 'icontains',
'field2_json': 'some__gt',
}
class Composer(Bootstrap5): # apply styling as it fits our needs
opt_form_inline = True
class Meta:
model = Article
fields = ['title', 'status']
# In our view function:
filter_form = MyFilterForm(request=request, src='GET', id='flt')
query_set = Article.objects.all()
# Now we apply filter to our query set
listing, filter_applied = filter_form.filtering_apply(query_set)