-
Notifications
You must be signed in to change notification settings - Fork 302
Description
Describe the bug
@extend_schema_field
does not work on custom serializers whose parent serializer uses the many=True
method because it internally invokes a ListField
which does not have that extended schema.
To Reproduce
If you have say a serializer
@extend_schema_field(serializers.DictField())
class MyChild(serializers.Serializer):
value = serializers.CharField()
class MySerializer(serializers.Serializer):
child = MyChild()
Then this works perfectly. However say I instead want it to be a list.
class MySerializer(serializers.Serializer):
children = MyChild(many=True)
Then this no longer works because internally children
is now a ListField
which does not have any @extend_schema_field
If I for example create my own custom ListField
class MyChild(serializers.Serializer):
value = serializers.CharField()
@extend_schema_field(serializers.ListField(child=serializers.DictField()))
class MyChildren(serializers.ListField): ...
class MySerializer(serializers.Serializer):
child = MyChildren(child=MyChild())
It now works because I have correctly wrapped @extend_schema_field
in the ListField
object. However this is very awkward behaviour and you end up creating a bunch of dummy classes.
Expected behavior
When you wrap @extend_schema_field
around a serializer that is invoked with many=True
then under the hood a custom ListField
should be created which wraps that schema field in a ListField
.