【问题标题】:Django rest framework: serializing extra fields that depend on other state?Django rest框架:序列化依赖于其他状态的额外字段?
【发布时间】:2021-05-25 06:02:56
【问题描述】:

This question 询问如何向 ModelSerializer 添加附加字段。

This answer 表示您可以添加SerializerMethodField。但是,如果调用的值取决于其他一些参数,比如请求,如何实现方法字段?

【问题讨论】:

  • SerializerMethodField 是一个只读字段。所以它只在序列化期间使用。您可以使用额外的上下文将请求传递给序列化程序并在那里使用它。

标签: django django-rest-framework


【解决方案1】:

您可以为此使用序列化程序上下文(请参阅docs

class MySerializer(serializers.Serializer):
    my_field = serializers.SerializerMethodField()

    def get_my_field(self, obj):
        request = self.context['request']
        # do something with request and obj

然后当你初始化序列化器时,一定要在上下文中传入请求对象,例如:

serializer = MySerializer(myObject, context={'request': request})

【讨论】:

    【解决方案2】:

    类 MySerializer(serializers.Serializer): my_field = serializers.SerializerMethodField()

    def to_represention(self,instance):
           data=super().to_representation(instance)
           data["user"]="new filed"
           return data
    

    【讨论】:

      猜你喜欢
      • 2015-09-01
      • 2017-06-26
      • 2014-07-30
      • 1970-01-01
      • 2022-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多