背景:
经常,我们希望在 django的viewset视图函数 中对request中的数据进行一定的添加或修改,然后才将数据传到 serializer中去。
问题点:
但是django 机制中的 request 是不允许被修改的
解决方案
request.POST._mutable =True
修改该字典的mutable属性值
def update_validate(self):
""" 修改前校验 """
name = self.request.data.get('name', None)
# 如果没有name,则赋予原有的name
if not name:
instance = self.get_object()
name = instance.name
self.request.POST._mutable = True
self.request.POST['name'] = name
self.request.POST._mutable = False
如果想要对request.data进行整体性的修改,可以参考如下代码:
def build_request(self, data, request):
""" 构造请求对象 """
request.data._mutable = True
request.data.update(data)
request.data._mutable = False
注意:
- 这里的data是其他函数封装好的字典类型数据进行的传参
tips:
相同的方法也可以用于request.GET 或者 request.data