Skip to content

Commit 87b420f

Browse files
committed
✨ Add object filter on EnkelvoudigInformatieObject list
issue: VNG-Realisatie/gemma-zaken#1891
1 parent 870b7b4 commit 87b420f

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

src/drc/api/filters.py

+36-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
from django.db.models import Q
2+
13
from django_filters import rest_framework as filters
4+
from django_filters.constants import EMPTY_VALUES
25
from vng_api_common.filters import URLModelChoiceFilter
36
from vng_api_common.filtersets import FilterSet
47
from vng_api_common.utils import get_help_text
@@ -11,10 +14,42 @@
1114
)
1215

1316

17+
class ObjectFilter(filters.BaseCSVFilter):
18+
"""
19+
Allow filtering of ENKELVOUDIGINFORMATIEOBJECTen by objects they are related
20+
to (through the OBJECTINFORMATIEOBJECT resource)
21+
"""
22+
23+
def filter(self, qs, values):
24+
if values in EMPTY_VALUES:
25+
return qs
26+
27+
if self.distinct:
28+
qs = qs.distinct()
29+
30+
lookups = Q()
31+
for value in values:
32+
lookups |= Q(object=value)
33+
34+
oios = ObjectInformatieObject.objects.filter(lookups)
35+
qs = self.get_method(qs)(
36+
canonical__id__in=list(oios.values_list("informatieobject__id", flat=True))
37+
)
38+
return qs
39+
40+
1441
class EnkelvoudigInformatieObjectListFilter(FilterSet):
42+
object = ObjectFilter(
43+
help_text=(
44+
"De URL van het gerelateerde object "
45+
"(zoals vastgelegd in de OBJECTINFORMATIEOBJECT resource). "
46+
"Meerdere waardes kunnen met komma's gescheiden worden."
47+
)
48+
)
49+
1550
class Meta:
1651
model = EnkelvoudigInformatieObject
17-
fields = ("identificatie", "bronorganisatie")
52+
fields = ("identificatie", "bronorganisatie", "object")
1853

1954

2055
class EnkelvoudigInformatieObjectDetailFilter(FilterSet):

src/openapi.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,13 @@ paths:
158158
required: false
159159
schema:
160160
type: string
161+
- name: object
162+
in: query
163+
description: De URL van het gerelateerde object (zoals vastgelegd in de OBJECTINFORMATIEOBJECT
164+
resource). Meerdere waardes kunnen met komma's gescheiden worden.
165+
required: false
166+
schema:
167+
type: string
161168
- name: page
162169
in: query
163170
description: Een pagina binnen de gepagineerde set resultaten.

src/swagger2.0.json

+7
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,13 @@
157157
"required": false,
158158
"type": "string"
159159
},
160+
{
161+
"name": "object",
162+
"in": "query",
163+
"description": "De URL van het gerelateerde object (zoals vastgelegd in de OBJECTINFORMATIEOBJECT resource). Meerdere waardes kunnen met komma's gescheiden worden.",
164+
"required": false,
165+
"type": "string"
166+
},
160167
{
161168
"name": "page",
162169
"in": "query",

0 commit comments

Comments
 (0)