Skip to content

Commit 9970b35

Browse files
Merge pull request #4913 from open-formulieren/cleanup/3283-remove-fd-or-filtering
💥 Remove OR-filter behaviour on form definitions endpoint
2 parents 25c04e3 + aa7abce commit 9970b35

File tree

2 files changed

+0
-71
lines changed

2 files changed

+0
-71
lines changed

src/openforms/forms/api/filters.py

-37
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
import warnings
2-
3-
from django.db.models import Q
41
from django.utils.translation import gettext_lazy as _
52

63
from django_filters import rest_framework as filters
7-
from django_filters.constants import EMPTY_VALUES
84
from drf_spectacular.types import OpenApiTypes
95
from drf_spectacular.utils import extend_schema_field
106

@@ -31,36 +27,3 @@ class FormDefinitionFilter(filters.FilterSet):
3127
class Meta:
3228
model = FormDefinition
3329
fields = ("is_reusable",)
34-
or_fields = ("is_reusable", "used_in")
35-
36-
def filter_queryset(self, queryset):
37-
"""
38-
Override base implementation to add OR-behaviour instead of the standard AND.
39-
40-
See https://github.com/carltongibson/django-filter/discussions/1426
41-
"""
42-
_or = Q()
43-
44-
for name in self.Meta.or_fields:
45-
# this essentially re-implements django_filters.filters.Filter.filter,
46-
# as otherwise we would have to introspect private django query/queryset API
47-
# *shudders*
48-
or_filter_value = self.form.cleaned_data.pop(name)
49-
if or_filter_value in EMPTY_VALUES:
50-
continue
51-
or_filter = self.filters[name]
52-
if or_filter.distinct:
53-
queryset = queryset.distinct()
54-
lookup = "%s__%s" % (or_filter.field_name, or_filter.lookup_expr)
55-
q_expr = Q(**{lookup: or_filter_value})
56-
if or_filter.exclude:
57-
q_expr = ~q_expr
58-
_or |= q_expr
59-
60-
if _or:
61-
warnings.warn(
62-
"Using OR filters is deprecated and will be removed starting with Open Forms 3.0",
63-
DeprecationWarning,
64-
)
65-
queryset = queryset.filter(_or)
66-
return super().filter_queryset(queryset)

src/openforms/forms/tests/test_api_formdefinition.py

-34
Original file line numberDiff line numberDiff line change
@@ -483,40 +483,6 @@ def test_filter_by_used_in(self):
483483
fd["uuid"], str(form_1.formstep_set.get().form_definition.uuid)
484484
)
485485

486-
def test_filter_by_used_in_or_reusable(self):
487-
user = StaffUserFactory.create(user_permissions=["change_form"])
488-
self.client.force_authenticate(user=user)
489-
FormDefinitionFactory.create(is_reusable=False, slug="fd-0")
490-
fd2 = FormDefinitionFactory.create(is_reusable=True, slug="fd-1")
491-
FormFactory.create(
492-
generate_minimal_setup=True,
493-
formstep__form_definition__slug="fd-2",
494-
formstep__form_definition__is_reusable=False,
495-
)
496-
form_2 = FormFactory.create(
497-
generate_minimal_setup=True,
498-
formstep__form_definition__slug="fd-3",
499-
formstep__form_definition__is_reusable=True,
500-
)
501-
url = reverse("api:formdefinition-list")
502-
503-
response = self.client.get(
504-
url,
505-
{
506-
"used_in": form_2.uuid,
507-
"is_reusable": "true",
508-
},
509-
)
510-
511-
self.assertEqual(response.status_code, status.HTTP_200_OK)
512-
response_data = response.json()
513-
self.assertEqual(response_data["count"], 2)
514-
fd_2, fd_4 = response_data["results"]
515-
self.assertEqual(fd_2["uuid"], str(fd2.uuid))
516-
self.assertEqual(
517-
fd_4["uuid"], str(form_2.formstep_set.get().form_definition.uuid)
518-
)
519-
520486
@override_settings(LANGUAGE_CODE="en")
521487
def test_duplicate_components(self):
522488
user = StaffUserFactory.create(user_permissions=["change_form"])

0 commit comments

Comments
 (0)