【问题标题】:Django Rest Framework - modify serializer.dataDjango Rest Framework - 修改 serializer.data
【发布时间】:2015-11-08 14:27:55
【问题描述】:

我认为我正在执行以下操作 -

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!'

除非我复印,否则不起作用。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      就我而言,我需要使用一些 exta dict 更新 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).
      

      参考:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-31
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 2014-08-24
        • 1970-01-01
        • 1970-01-01
        • 2018-10-29
        相关资源
        最近更新 更多