Skip to content

Commit 828e59c

Browse files
committed
implement DjangoFilterBackend.get_schema_operation_parameters
1 parent 7abd764 commit 828e59c

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

rest_framework_json_api/django_filters/backends.py

+29
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import re
2+
import warnings
23

34
from django_filters import VERSION
45
from django_filters.rest_framework import DjangoFilterBackend
@@ -142,3 +143,31 @@ def filter_queryset(self, request, queryset, view):
142143
return filter_class(kwargs['data'], queryset=queryset, request=request).qs
143144

144145
return queryset
146+
147+
def get_schema_operation_parameters(self, view):
148+
"""
149+
Return Open API query parameter schema.
150+
"""
151+
# TODO: Update this to extend the upstream django-filter implemntation if and when that gets merged.
152+
# see https://github.com/carltongibson/django-filter/pull/1086
153+
154+
try:
155+
queryset = view.get_queryset()
156+
except Exception:
157+
queryset = None
158+
warnings.warn(
159+
"{} is not compatible with schema generation".format(view.__class__)
160+
)
161+
162+
filterset_class = self.get_filterset_class(view, queryset)
163+
return [] if not filterset_class else [
164+
({
165+
'name': 'filter[{}]'.format(field_name.replace('__', '.')),
166+
'required': field.extra['required'],
167+
'in': 'query',
168+
'description': field.label if field.label is not None else field_name,
169+
'schema': {
170+
'type': 'string',
171+
},
172+
}) for field_name, field in filterset_class.base_filters.items()
173+
]

0 commit comments

Comments
 (0)