django filter groups
This package groups filters generated by django-filter.
The main reason to use it - don't show all filters (show only selected filters)
how to use
pip install django-filter-groups
add to your INSTALLED_APPS
after django-filter
INSTALLED_APPS = [
...
"django_filters",
"django_filters_groups",
...
]
use it in your template:
- add
{% add_select_filter_form_to_context %}
to the top of your template. It allows you to place{{ select_filter_form.media }}
anywhere you want - add
{% filters_by_groups %}
- add
{{ select_filter_form.media }}
If FilterSet name is not 'filter' -> add filterset to both tags
{% add_select_filter_form_to_context my_custom_filterset %}
{% filters_by_groups my_custom_filterset %}
or filterset name
{% filters_by_groups "my_custom_filterset" %}
{% add_select_filter_form_to_context "my_custom_filterset" %}
warning
It's necessary to add values to exact
and iexact
VERBOSE_LOOKUPS.
Filter choice will be empty if they won't be presented
default settings
# django settings
FILTERS_GROUPS_SELECT_FILTER_FORM_LABEL = "Select a label"
// static/django_filters_groups/filter-defaults.js
let filterDefaults = {
filterWrapperSelector: "p", // p is necessary when you use {{ form.as_p }}
submitOnFilterDelete: false,
};
change group name
You can set group name directly in 2 ways:
- add
filter_group_label
to your custom filter
class FFieldCountFilter(django_filters.NumberFilter):
filter_group_label = "custom_group_label"
- use
get_filter_class_with_custom_label
from django_filters_groups.utils import get_filter_class_with_group_label
class MyFilterSet(django_filters.FilterSet):
custom_filter = get_filter_class_with_group_label(django_filters.NumberFilter, "hello1111")(label="1123")