From d23ca041cfe5a68fa9c6e7ea4755596634e5b800 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 2 Apr 2019 11:17:14 -0400 Subject: [PATCH] Ensure fallback to default serializer when attempting to load nested serializer --- netbox/utilities/api.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/netbox/utilities/api.py b/netbox/utilities/api.py index e0e7f3c71..fbebd09ff 100644 --- a/netbox/utilities/api.py +++ b/netbox/utilities/api.py @@ -21,6 +21,10 @@ class ServiceUnavailable(APIException): default_detail = "Service temporarily unavailable, please try again later." +class SerializerNotFound(Exception): + pass + + def get_serializer_for_model(model, prefix=''): """ Dynamically resolve and return the appropriate serializer for a model. @@ -32,7 +36,7 @@ def get_serializer_for_model(model, prefix=''): try: return dynamic_import(serializer_name) except AttributeError: - raise Exception( + raise SerializerNotFound( "Could not determine serializer for {}.{} with prefix '{}'".format(app_name, model_name, prefix) ) @@ -236,9 +240,10 @@ class ModelViewSet(_ModelViewSet): # exists request = self.get_serializer_context()['request'] if request.query_params.get('brief', False): - serializer_class = get_serializer_for_model(self.queryset.model, prefix='Nested') - if serializer_class is not None: - return serializer_class + try: + return get_serializer_for_model(self.queryset.model, prefix='Nested') + except SerializerNotFound: + pass # Fall back to the hard-coded serializer class return self.serializer_class