diff --git a/awx/api/generics.py b/awx/api/generics.py index cce3800deb..7d30b6eda5 100644 --- a/awx/api/generics.py +++ b/awx/api/generics.py @@ -139,6 +139,16 @@ class GenericAPIView(generics.GenericAPIView, APIView): # model = ModelClass # serializer_class = SerializerClass + def get_serializer(self, *args, **kwargs): + serializer = super(GenericAPIView, self).get_serializer(*args, **kwargs) + # Override when called from browsable API to generate raw data form; + # always remove read only fields from sample raw data. + if hasattr(self, '_raw_data_form_marker'): + for name, field in serializer.fields.items(): + if getattr(field, 'read_only', None): + del serializer.fields[name] + return serializer + def get_queryset(self): #if hasattr(self.request.user, 'get_queryset'): # return self.request.user.get_queryset(self.model) diff --git a/awx/api/renderers.py b/awx/api/renderers.py index 9ccf3c1eb4..3ae5dd2616 100644 --- a/awx/api/renderers.py +++ b/awx/api/renderers.py @@ -16,6 +16,13 @@ class BrowsableAPIRenderer(renderers.BrowsableAPIRenderer): return renderers.JSONRenderer() return renderer + def get_raw_data_form(self, view, method, request): + try: + setattr(view, '_raw_data_form_marker', True) + return super(BrowsableAPIRenderer, self).get_raw_data_form(view, method, request) + finally: + delattr(view, '_raw_data_form_marker') + def get_rendered_html_form(self, view, method, request): '''Never show auto-generated form (only raw form).''' obj = getattr(view, 'object', None)