diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index b326a7fbc..a296dbbd0 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -260,6 +260,10 @@ SWAGGER_SETTINGS = { 'drf_yasg.inspectors.SimpleFieldInspector', 'drf_yasg.inspectors.StringDefaultFieldInspector', ], + 'DEFAULT_FILTER_INSPECTORS': [ + 'utilities.custom_inspectors.IdInFilterInspector', + 'drf_yasg.inspectors.CoreAPICompatInspector', + ], 'DEFAULT_PAGINATOR_INSPECTORS': [ 'utilities.custom_inspectors.NullablePaginatorInspector', 'drf_yasg.inspectors.DjangoRestResponsePagination', diff --git a/netbox/utilities/custom_inspectors.py b/netbox/utilities/custom_inspectors.py index 25330ad67..b97506b85 100644 --- a/netbox/utilities/custom_inspectors.py +++ b/netbox/utilities/custom_inspectors.py @@ -1,5 +1,5 @@ from drf_yasg import openapi -from drf_yasg.inspectors import FieldInspector, NotHandled, PaginatorInspector +from drf_yasg.inspectors import FieldInspector, NotHandled, PaginatorInspector, FilterInspector from rest_framework.fields import ChoiceField from extras.api.customfields import CustomFieldsSerializer @@ -53,6 +53,16 @@ class NullableBooleanFieldInspector(FieldInspector): return result +class IdInFilterInspector(FilterInspector): + def process_result(self, result, method_name, obj, **kwargs): + if isinstance(result, list): + params = [p for p in result if isinstance(p, openapi.Parameter) and p.name == 'id__in'] + for p in params: + p.type = 'string' + + return result + + class NullablePaginatorInspector(PaginatorInspector): def process_result(self, result, method_name, obj, **kwargs): if method_name == 'get_paginated_response' and isinstance(result, openapi.Schema):