Просмотр исходного кода

Fixes #2968: Correct API documentation for SerializerMethodFields

Jeremy Stretch 7 лет назад
Родитель
Сommit
d9c8c0cbc1

+ 4 - 0
CHANGELOG.md

@@ -24,6 +24,10 @@ to now use "Extras | Tag."
 * [#2791](https://github.com/digitalocean/netbox/issues/2791) - Add a `comment` field for tags
 * [#2926](https://github.com/digitalocean/netbox/issues/2926) - Add changelog to the Tag model
 
+## Bug Fixes
+
+* [#2968](https://github.com/digitalocean/netbox/issues/2968) - Correct API documentation for SerializerMethodFields
+
 ---
 
 v2.5.8 (FUTURE)

+ 7 - 0
netbox/dcim/api/serializers.py

@@ -1,3 +1,4 @@
+from drf_yasg.utils import swagger_serializer_method
 from rest_framework import serializers
 from rest_framework.validators import UniqueTogetherValidator
 from taggit_serializer.serializers import TaggitSerializer, TagListSerializerField
@@ -35,6 +36,7 @@ class ConnectedEndpointSerializer(ValidatedModelSerializer):
             )
         return None
 
+    @swagger_serializer_method(serializer_or_field=serializers.DictField)
     def get_connected_endpoint(self, obj):
         """
         Return the appropriate serializer for the type of connected object.
@@ -312,6 +314,7 @@ class DeviceSerializer(TaggitSerializer, CustomFieldModelSerializer):
 
         return data
 
+    @swagger_serializer_method(serializer_or_field=NestedDeviceSerializer)
     def get_parent_device(self, obj):
         try:
             device_bay = obj.parent_bay
@@ -334,6 +337,7 @@ class DeviceWithConfigContextSerializer(DeviceSerializer):
             'custom_fields', 'config_context', 'created', 'last_updated',
         ]
 
+    @swagger_serializer_method(serializer_or_field=serializers.DictField)
     def get_config_context(self, obj):
         return obj.get_config_context()
 
@@ -531,9 +535,11 @@ class CableSerializer(ValidatedModelSerializer):
 
         return data
 
+    @swagger_serializer_method(serializer_or_field=serializers.DictField)
     def get_termination_a(self, obj):
         return self._get_termination(obj, 'a')
 
+    @swagger_serializer_method(serializer_or_field=serializers.DictField)
     def get_termination_b(self, obj):
         return self._get_termination(obj, 'b')
 
@@ -564,6 +570,7 @@ class InterfaceConnectionSerializer(ValidatedModelSerializer):
         model = Interface
         fields = ['interface_a', 'interface_b', 'connection_status']
 
+    @swagger_serializer_method(serializer_or_field=NestedInterfaceSerializer)
     def get_interface_a(self, obj):
         context = {'request': self.context['request']}
         return NestedInterfaceSerializer(instance=obj, context=context).data

+ 3 - 0
netbox/extras/api/serializers.py

@@ -1,4 +1,5 @@
 from django.core.exceptions import ObjectDoesNotExist
+from drf_yasg.utils import swagger_serializer_method
 from rest_framework import serializers
 
 from dcim.api.nested_serializers import (
@@ -112,6 +113,7 @@ class ImageAttachmentSerializer(ValidatedModelSerializer):
 
         return data
 
+    @swagger_serializer_method(serializer_or_field=serializers.DictField)
     def get_parent(self, obj):
 
         # Static mapping of models to their nested serializers
@@ -215,6 +217,7 @@ class ObjectChangeSerializer(serializers.ModelSerializer):
             'id', 'time', 'user', 'user_name', 'request_id', 'action', 'content_type', 'changed_object', 'object_data',
         ]
 
+    @swagger_serializer_method(serializer_or_field=serializers.DictField)
     def get_changed_object(self, obj):
         """
         Serialize a nested representation of the changed object.

+ 1 - 0
netbox/netbox/settings.py

@@ -308,6 +308,7 @@ SWAGGER_SETTINGS = {
         'drf_yasg.inspectors.ChoiceFieldInspector',
         'drf_yasg.inspectors.FileFieldInspector',
         'drf_yasg.inspectors.DictFieldInspector',
+        'drf_yasg.inspectors.SerializerMethodFieldInspector',
         'drf_yasg.inspectors.SimpleFieldInspector',
         'drf_yasg.inspectors.StringDefaultFieldInspector',
     ],

+ 2 - 0
netbox/virtualization/api/serializers.py

@@ -1,3 +1,4 @@
+from drf_yasg.utils import swagger_serializer_method
 from rest_framework import serializers
 from taggit_serializer.serializers import TaggitSerializer, TagListSerializerField
 
@@ -80,6 +81,7 @@ class VirtualMachineWithConfigContextSerializer(VirtualMachineSerializer):
             'config_context', 'created', 'last_updated',
         ]
 
+    @swagger_serializer_method(serializer_or_field=serializers.DictField)
     def get_config_context(self, obj):
         return obj.get_config_context()