Django rest框架:序列化依赖于其他状态的额外字段?

Posted

技术标签:

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

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

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

【问题讨论】:

SerializerMethodField 是一个只读字段。所以它只在序列化期间使用。您可以使用额外的上下文将请求传递给序列化程序并在那里使用它。 【参考方案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

【讨论】:

以上是关于Django rest框架:序列化依赖于其他状态的额外字段?的主要内容,如果未能解决你的问题,请参考以下文章

Django REST框架 -序列化

Django Rest框架:序列化程序上的共享字段

django rest 框架:从序列化器 validate() 方法设置字段级错误

如何覆盖 django rest 框架( DRF )中的响应类?

基于Django的Rest Framework框架的序列化组件

django rest框架嵌套模型序列化器