1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Ensure fallback to default serializer when attempting to load nested serializer

This commit is contained in:
Jeremy Stretch
2019-04-02 11:17:14 -04:00
parent 110387e81b
commit d23ca041cf

View File

@ -21,6 +21,10 @@ class ServiceUnavailable(APIException):
default_detail = "Service temporarily unavailable, please try again later." default_detail = "Service temporarily unavailable, please try again later."
class SerializerNotFound(Exception):
pass
def get_serializer_for_model(model, prefix=''): def get_serializer_for_model(model, prefix=''):
""" """
Dynamically resolve and return the appropriate serializer for a model. Dynamically resolve and return the appropriate serializer for a model.
@ -32,7 +36,7 @@ def get_serializer_for_model(model, prefix=''):
try: try:
return dynamic_import(serializer_name) return dynamic_import(serializer_name)
except AttributeError: except AttributeError:
raise Exception( raise SerializerNotFound(
"Could not determine serializer for {}.{} with prefix '{}'".format(app_name, model_name, prefix) "Could not determine serializer for {}.{} with prefix '{}'".format(app_name, model_name, prefix)
) )
@ -236,9 +240,10 @@ class ModelViewSet(_ModelViewSet):
# exists # exists
request = self.get_serializer_context()['request'] request = self.get_serializer_context()['request']
if request.query_params.get('brief', False): if request.query_params.get('brief', False):
serializer_class = get_serializer_for_model(self.queryset.model, prefix='Nested') try:
if serializer_class is not None: return get_serializer_for_model(self.queryset.model, prefix='Nested')
return serializer_class except SerializerNotFound:
pass
# Fall back to the hard-coded serializer class # Fall back to the hard-coded serializer class
return self.serializer_class return self.serializer_class