Django Rest框架-修改serializer.data
我认为我正在做以下工作-Django Rest框架-修改serializer.data,django,django-rest-framework,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'
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!'
除非我复制,否则不起作用。简单的解决方案就是设置检索到的对象属性(
class\u data.my\u field='updated info!'
)
在我的例子中,我需要用一些exta dict更新serializer.data。
我用下面的方法求解,合并了有序的dicts
serializer.data[0]和额外的dict
参考:
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).