需求描述
视图中可将 request.data
传递给序列化器,但 request.data
是不可更改的对象,但又想将额外的参数传递给序列化器。
问题分析
思路1
copy request.data
,再copy的对象操作,然后传递给序列化器。
思路2
根据序列化器的构造方法,可以使用 context
参数。
TestSerializer(instance=None,data=empty,**kwargs)
-
用于序列化时,将模型类对象传入
instance
参数; -
用于反序列化时,将要被反序列化的数据传入
data
参数; -
除了
instance
和data
参数外,在构造Serializer
对象时,还可以通过context
参数额外添加数据,通过context
添加的数据,可以通过Serializer
对象的context
属性获取;
解决方案
context(推荐)
# views.py
serilizer = TestSerilizer(
instance=instance,
data=request.data,
context={
'arg': value
}
)
在序列化器中可以这样获取:
def update(self, instance,validate_data):
arg = self.context.get('arg')
# 数据操作
pass
return instance
copy
# views.py
data = request.data
data['arg'] = value
serilizer = TestSerilizer(
instance=instance,
data=data
)