Corrects error with ListSerializer as request_body

This commit is contained in:
Daniel Sheppard 2021-01-26 14:03:46 -06:00
parent 97a425f12c
commit e218929203

View File

@ -28,8 +28,19 @@ class NetBoxSwaggerAutoSchema(SwaggerAutoSchema):
serializer = super().get_request_serializer() serializer = super().get_request_serializer()
if serializer is not None and self.method in self.implicit_body_methods: if serializer is not None and self.method in self.implicit_body_methods:
writable_class = self.get_writable_class(serializer)
if writable_class is not None:
if hasattr(serializer, 'child'):
child_serializer = self.get_writable_class(serializer.child)
serializer = writable_class(child=child_serializer)
else:
serializer = writable_class()
return serializer
def get_writable_class(self, serializer):
properties = {} properties = {}
for child_name, child in serializer.fields.items(): fields = {} if hasattr(serializer, 'child') else serializer.fields
for child_name, child in fields.items():
if isinstance(child, (ChoiceField, WritableNestedSerializer)): if isinstance(child, (ChoiceField, WritableNestedSerializer)):
properties[child_name] = None properties[child_name] = None
elif isinstance(child, ManyRelatedField) and isinstance(child.child_relation, SerializedPKRelatedField): elif isinstance(child, ManyRelatedField) and isinstance(child.child_relation, SerializedPKRelatedField):
@ -47,9 +58,7 @@ class NetBoxSwaggerAutoSchema(SwaggerAutoSchema):
self.writable_serializers[type(serializer)] = type(writable_name, (type(serializer),), properties) self.writable_serializers[type(serializer)] = type(writable_name, (type(serializer),), properties)
writable_class = self.writable_serializers[type(serializer)] writable_class = self.writable_serializers[type(serializer)]
serializer = writable_class() return writable_class
return serializer
class SerializedPKRelatedFieldInspector(FieldInspector): class SerializedPKRelatedFieldInspector(FieldInspector):