drf_spectacular.utils.PolymorphicProxySerializer.__init__() got an unexpected keyword argument 'context'

huangapple go评论144阅读模式
英文:

drf_spectacular.utils.PolymorphicProxySerializer.__init__() got an unexpected keyword argument 'context'

问题

我正在使用由drf_spectacular提供的PolymorphicProxySerializer,但在尝试加载模式时遇到了一个奇怪的错误。

用法

  1. @extend_schema(
  2. parameters=[NoteQueryParameters],
  3. responses=PolymorphicProxySerializer(
  4. component_name="NoteSerializer",
  5. serializers=[NoteSerializer, NoteSerializerWithJiraData],
  6. resource_type_field_name=None,
  7. ),
  8. )
  9. def list(self, request, *args, **kwargs):
  10. return super().list(request, *args, **kwargs)

序列化器

  1. class CleanedJiraDataSerializer(serializers.Serializer):
  2. key = serializers.CharField(max_length=20, allow_null=True)
  3. class BugSerializer(serializers.Serializer):
  4. failures = serializers.CharField(max_length=10, required=False, allow_null=True)
  5. suite = serializers.CharField(max_length=100, required=False, allow_null=True)
  6. notes = serializers.CharField(max_length=1000, required=False, allow_null=True)
  7. tags = StringListField(required=False, allow_null=True, allow_empty=True)
  8. testCaseNames = StringListField(required=False, allow_null=True, allow_empty=True)
  9. testCaseIds = StringListField(required=False, allow_null=True, allow_empty=True)
  10. jira = CleanedJiraDataSerializer(required=False, allow_null=True)
  11. class BugSerializerWithJiraData(BugSerializer):
  12. jira = serializers.DictField()
  13. class NoteSerializer(serializers.ModelSerializer):
  14. bug = serializers.ListField(child=BugSerializer())
  15. class Meta:
  16. model = Notes
  17. fields = "__all__"
  18. class NoteSerializerWithJiraData(serializers.ModelSerializer):
  19. bug = serializers.ListField(child=BugSerializerWithJiraData())
  20. class Meta:
  21. model = Notes
  22. fields = "__all__"

基本上,如果在请求中添加了一个布尔查询参数,我将注入从Jira API获取的一些动态数据。我正在尝试更新API文档以表示两种不同的可能模式。

  1. PolymorphicProxySerializer.__init__() got an unexpected keyword argument 'context'
英文:

I am using a PolymorphicProxySerializer provided by drf_spectacular but I am getting a strange error when attempting to load the schema

usage

  1. @extend_schema(
  2. parameters=[NoteQueryParameters],
  3. responses=PolymorphicProxySerializer(
  4. component_name="NoteSerializer",
  5. serializers=[NoteSerializer, NoteSerializerWithJiraData],
  6. resource_type_field_name=None,
  7. ),
  8. )
  9. def list(self, request, *args, **kwargs):
  10. return super().list(request, *args, **kwargs)

serializers

  1. class CleanedJiraDataSerializer(serializers.Serializer):
  2. key = serializers.CharField(max_length=20, allow_null=True)
  3. class BugSerializer(serializers.Serializer):
  4. failures = serializers.CharField(max_length=10, required=False, allow_null=True)
  5. suite = serializers.CharField(max_length=100, required=False, allow_null=True)
  6. notes = serializers.CharField(max_length=1000, required=False, allow_null=True)
  7. tags = StringListField(required=False, allow_null=True, allow_empty=True)
  8. testCaseNames = StringListField(required=False, allow_null=True, allow_empty=True)
  9. testCaseIds = StringListField(required=False, allow_null=True, allow_empty=True)
  10. jira = CleanedJiraDataSerializer(required=False, allow_null=True)
  11. class BugSerializerWithJiraData(BugSerializer):
  12. jira = serializers.DictField()
  13. class NoteSerializer(serializers.ModelSerializer):
  14. bug = serializers.ListField(child=BugSerializer())
  15. class Meta:
  16. model = Notes
  17. fields = "__all__"
  18. class NoteSerializerWithJiraData(serializers.ModelSerializer):
  19. bug = serializers.ListField(child=BugSerializerWithJiraData())
  20. class Meta:
  21. model = Notes
  22. fields = "__all__"

Basically, if a boolean query parameter is added to the request, I will inject some dynamic data fetched from the jira api. I am trying to update the api docs to represent to two distinct possible schema

  1. PolymorphicProxySerializer.__init__() got an unexpected keyword argument 'context'

答案1

得分: 1

你需要在实例化PolymorphicProxySerializer时传递many=True,因为你正在装饰一个ListView。

  1. @extend_schema(
  2. parameters=[NoteQueryParameters],
  3. responses=PolymorphicProxySerializer(
  4. component_name="NoteSerializer",
  5. serializers=[NoteSerializer, NoteSerializerWithJiraData],
  6. resource_type_field_name=None,
  7. many=True
  8. ),
  9. )
  10. def list(self, request, *args, **kwargs):
  11. return super().list(request, *args, **kwargs)
英文:

You need to pass many=True when you instantiate PolymorphicProxySerializer, since you're decorating a ListView.

  1. @extend_schema(
  2. parameters=[NoteQueryParameters],
  3. responses=PolymorphicProxySerializer(
  4. component_name="NoteSerializer",
  5. serializers=[NoteSerializer, NoteSerializerWithJiraData],
  6. resource_type_field_name=None,
  7. many=True
  8. ),
  9. )
  10. def list(self, request, *args, **kwargs):
  11. return super().list(request, *args, **kwargs)

huangapple
  • 本文由 发表于 2023年6月6日 01:48:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/76408850.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定