Skip to content

Commit 530416d

Browse files
committed
tweak noop filter behavior, add tests for coverage
1 parent fd2411f commit 530416d

File tree

3 files changed

+38
-5
lines changed

3 files changed

+38
-5
lines changed

doc/source/changelog.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
Change Log
55
==========
66

7-
v2.2.0 (2025-03-23)
7+
v2.2.0 (2025-03-27)
88
===================
99

10+
* Implemented `Need a DRF integration for FlagFields <https://github.com/bckohan/django-enum/issues/113>`_
1011
* Fixed `FilterSet override of filter_for_lookup disregards meta options. <https://github.com/bckohan/django-enum/issues/111>`_
1112
* Implemented `Add EnumFlagFilter to support has_any and has_all flag queries. <https://github.com/bckohan/django-enum/issues/110>`_
1213
* Fixed `Enum types that resolve to primitives of str or int but that do not inherit from those types can result in validation errors. <https://github.com/bckohan/django-enum/issues/109>`_

src/django_enum/filters.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,13 @@ def __init__(
147147
)
148148
self.lookup_expr = "has_all" if conjoined else "has_any"
149149

150+
def is_noop(self, qs, value):
151+
return value is None or value == ""
152+
150153
def filter(self, qs, value):
151-
if value in {None, ""} or self.is_noop(qs, value):
154+
if self.is_noop(qs, value):
152155
return qs
153156

154-
if value == self.null_value:
155-
return self.get_method(qs)(Q(**{f"{self.field_name}__isnull": True}))
156-
157157
# special case of no activate flags, performs an exact lookup
158158
# the form cleans unsupplied fields into 0s so we make sure this was supplied
159159
# before filtering on it

tests/test_requests.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1307,6 +1307,38 @@ def list_to_objects(self, resp_content):
13071307

13081308
if find_spec("django_filters"): # pragma: no cover
13091309

1310+
def test_filter_misc_behavior(self):
1311+
from django_enum.filters import EnumFlagFilter
1312+
1313+
filter = EnumFlagFilter(enum=self.SmallPositiveFlagEnum)
1314+
qry = FlagFilterTester.objects
1315+
self.assertTrue(filter.is_noop(qry, None))
1316+
self.assertTrue(filter.is_noop(qry, ""))
1317+
self.assertFalse(
1318+
filter.is_noop(
1319+
qry,
1320+
[
1321+
self.SmallPositiveFlagEnum.ONE,
1322+
self.SmallPositiveFlagEnum.TWO,
1323+
self.SmallPositiveFlagEnum.THREE,
1324+
self.SmallPositiveFlagEnum.FOUR,
1325+
self.SmallPositiveFlagEnum.FIVE,
1326+
],
1327+
)
1328+
)
1329+
self.assertFalse(
1330+
filter.is_noop(
1331+
qry,
1332+
self.SmallPositiveFlagEnum.ONE
1333+
| self.SmallPositiveFlagEnum.TWO
1334+
| self.SmallPositiveFlagEnum.THREE
1335+
| self.SmallPositiveFlagEnum.FOUR
1336+
| self.SmallPositiveFlagEnum.FIVE,
1337+
)
1338+
)
1339+
self.assertIs(qry, filter.filter(qry, None))
1340+
self.assertIs(qry, filter.filter(qry, ""))
1341+
13101342
def test_django_filter_flags(self):
13111343
self.do_test_django_filter(reverse(f"{self.NAMESPACE}:flag-filter"))
13121344

0 commit comments

Comments
 (0)