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 框架:从序列化器 validate() 方法设置字段级错误
如何覆盖 django rest 框架( DRF )中的响应类?