Django Rest Framework - 修改serializer.data

时间:2015-11-08 14:27:55

标签: django django-rest-framework

我有一个观点,我正在做以下事情 -

def retrieve(self, request, pk=None):
    queryset = MyClass.objects.all()
    class_data = get_object_or_404(queryset, pk=pk)
    serializer = self.get_serializer(class_data)
    new_data = serializer.data.copy()
    new_data['my_field'] = 'updated info!'
    serializer = self.get_serializer(data=new_data)
    serializer.is_valid()
    return Response(serializer.data)

我不想复制序列化数据来更新信息。有没有办法在通过视图显示之前修改序列化程序中的字段?

编辑 -

serializer.data['my_field'] = 'updated info!'
除非我复印,否则

不起作用。

2 个答案:

答案 0 :(得分:1)

直接的解决方案就是设置检索到的对象属性(class_data.my_field = 'updated info!')。

答案 1 :(得分:0)

就我而言,我需要使用一些引言来更新serializer.data。 我以以下方式解决了,合并了命令 serializer.data [0]和额外的字典。

from itertools import chain
from collections import OrderedDict
class MyCreationApiView(generics.CreateAPIView):
    def create(self, request, *args, **kwargs):
        data = ...
         serializer = self.get_serializer(data=data, many=True, required=True,
                                         context={'request': self.request, 'search': search})
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        extra_dict = {'test': []}
 return Response([OrderedDict(chain(serializer.data[0].items(), extra_dict.items()))], status=status.HTTP_201_CREATED).

参考: