我有一个观点,我正在做以下事情 -
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!'
除非我复印,否则不起作用。
答案 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).
参考: