Filters¶
Support for django-filter.
- class django_enum.filters.EnumFilter(*, enum: Type[Enum], strict: bool = True, **kwargs)[source]¶
Bases:
TypedChoiceFilter
Use this filter class instead of
ChoiceFilter
to get filters to acceptEnum
labels and symmetric properties.For example if we have an enumeration field defined with the following Enum:
class Color(TextChoices): rgb: Annotated[Tuple[int, int, int], Symmetric()] hex: Annotated[str, Symmetric(case_fold=True)] RED = 'R', 'Red', (1, 0, 0), 'ff0000' GREEN = 'G', 'Green', (0, 1, 0), '00ff00' BLUE = 'B', 'Blue', (0, 0, 1), '0000ff' color = EnumField(Color)
The default
ChoiceFilter
will only work with the enumeration values: ?color=R, ?color=G, ?color=B.EnumFilter
will accept query parameter values from any of the symmetric properties: ?color=Red, ?color=ff0000, etc…- Parameters:
enum – The class of the enumeration containing the values to filter on
strict – If False (default), values not in the enumeration will be searchable.
kwargs – Any additional arguments from the base classes (
TypedChoiceFilter
)
- field_class¶
alias of
EnumChoiceField
- class django_enum.filters.EnumFlagFilter(*, enum: Type[Flag], strict: bool = True, conjoined: bool = False, **kwargs)[source]¶
Bases:
TypedMultipleChoiceFilter
Use this filter class with
FlagField
fields. It will allow the field to be listed multiple times in URL query strings (e.g.field=value&field=value
). By default the filter will query on these values with has_any these values together. Useconjoined
to use has_all instead.This filter also respects the
TypedMultipleChoiceFilter
base class parameters such asexclude
.- Parameters:
enum – The class of the enumeration containing the values to filter on
strict – If False (default), values not in the enumeration will be searchable.
conjoined – If True use has_all lookup, otherwise use has_any (default)
kwargs – Any additional arguments from base classes, (
TypedMultipleChoiceFilter
)
- field_class¶
alias of
EnumFlagField
- class django_enum.filters.FilterSet(data=None, queryset=None, *, request=None, prefix=None)[source]¶
Bases:
FilterSet
This filterset behaves the same way as the django-filter
FilterSet
except the following fields will be set to the following filter types:FlagField
->FlagFilter
If you have a custom
FilterSet
implementation, this class can also be used as a mixin.- FILTER_DEFAULTS = {<class 'django.db.models.AutoField'>: {'filter_class': <class 'django_filters.filters.NumberFilter'>}, <class 'django.db.models.BooleanField'>: {'filter_class': <class 'django_filters.filters.BooleanFilter'>}, <class 'django.db.models.CharField'>: {'filter_class': <class 'django_filters.filters.CharFilter'>}, <class 'django.db.models.CommaSeparatedIntegerField'>: {'filter_class': <class 'django_filters.filters.CharFilter'>}, <class 'django.db.models.DateField'>: {'filter_class': <class 'django_filters.filters.DateFilter'>}, <class 'django.db.models.DateTimeField'>: {'filter_class': <class 'django_filters.filters.DateTimeFilter'>}, <class 'django.db.models.DecimalField'>: {'filter_class': <class 'django_filters.filters.NumberFilter'>}, <class 'django.db.models.DurationField'>: {'filter_class': <class 'django_filters.filters.DurationFilter'>}, <class 'django.db.models.EmailField'>: {'filter_class': <class 'django_filters.filters.CharFilter'>}, <class 'django.db.models.FilePathField'>: {'filter_class': <class 'django_filters.filters.CharFilter'>}, <class 'django.db.models.FloatField'>: {'filter_class': <class 'django_filters.filters.NumberFilter'>}, <class 'django.db.models.ForeignKey'>: {'extra': <function <lambda>>, 'filter_class': <class 'django_filters.filters.ModelChoiceFilter'>}, <class 'django.db.models.GenericIPAddressField'>: {'filter_class': <class 'django_filters.filters.CharFilter'>}, <class 'django.db.models.IntegerField'>: {'filter_class': <class 'django_filters.filters.NumberFilter'>}, <class 'django.db.models.ManyToManyField'>: {'extra': <function <lambda>>, 'filter_class': <class 'django_filters.filters.ModelMultipleChoiceFilter'>}, <class 'django.db.models.NullBooleanField'>: {'filter_class': <class 'django_filters.filters.BooleanFilter'>}, <class 'django.db.models.OneToOneField'>: {'extra': <function <lambda>>, 'filter_class': <class 'django_filters.filters.ModelChoiceFilter'>}, <class 'django.db.models.PositiveIntegerField'>: {'filter_class': <class 'django_filters.filters.NumberFilter'>}, <class 'django.db.models.PositiveSmallIntegerField'>: {'filter_class': <class 'django_filters.filters.NumberFilter'>}, <class 'django.db.models.SlugField'>: {'filter_class': <class 'django_filters.filters.CharFilter'>}, <class 'django.db.models.SmallIntegerField'>: {'filter_class': <class 'django_filters.filters.NumberFilter'>}, <class 'django.db.models.TextField'>: {'filter_class': <class 'django_filters.filters.CharFilter'>}, <class 'django.db.models.TimeField'>: {'filter_class': <class 'django_filters.filters.TimeFilter'>}, <class 'django.db.models.URLField'>: {'filter_class': <class 'django_filters.filters.CharFilter'>}, <class 'django.db.models.UUIDField'>: {'filter_class': <class 'django_filters.filters.UUIDFilter'>}, <class 'django.db.models.fields.reverse_related.ManyToManyRel'>: {'extra': <function <lambda>>, 'filter_class': <class 'django_filters.filters.ModelMultipleChoiceFilter'>}, <class 'django.db.models.fields.reverse_related.ManyToOneRel'>: {'extra': <function <lambda>>, 'filter_class': <class 'django_filters.filters.ModelMultipleChoiceFilter'>}, <class 'django.db.models.fields.reverse_related.OneToOneRel'>: {'extra': <function <lambda>>, 'filter_class': <class 'django_filters.filters.ModelChoiceFilter'>}, <class 'django_enum.fields.EnumField'>: {'extra': <function FilterSet.<lambda>>, 'filter_class': <class 'django_enum.filters.EnumFilter'>}, <class 'django_enum.fields.FlagField'>: {'extra': <function FilterSet.<lambda>>, 'filter_class': <class 'django_enum.filters.EnumFlagFilter'>}}¶
- _meta = <django_filters.filterset.FilterSetOptions object>¶
- base_filters = {}¶
- declared_filters = {}¶
- class django_enum.filters.MultipleEnumFilter(*, enum: Type[Enum], strict: bool = True, conjoined: bool = False, **kwargs)[source]¶
Bases:
TypedMultipleChoiceFilter
Use this filter class instead of
MultipleChoiceFilter
to get filters to accept multipleEnum
labels and symmetric properties.- Parameters:
enum – The class of the enumeration containing the values to filter on
strict – If False (default), values not in the enumeration will be searchable.
conjoined – If True require all values to be present, if False require any
kwargs – Any additional arguments from base classes, (
TypedMultipleChoiceFilter
)
- field_class¶
alias of
EnumMultipleChoiceField