Django rest framework 具有多对象更新的DRF ModelSerializer和ListSerializer

Django rest framework 具有多对象更新的DRF ModelSerializer和ListSerializer,django-rest-framework,Django Rest Framework,我正在尝试根据情况使用单数和多个更新 项目序列化程序: class ProjectSerializer(serializers.ModelSerializer): class Meta: model = Project fields = "__all__" 而这一观点是正确的 class ProjectViewSet(viewsets.mixins.ListModelMixin, viewsets.mixins.

我正在尝试根据情况使用单数和多个更新

项目序列化程序:

class ProjectSerializer(serializers.ModelSerializer):
  class Meta:
    model = Project
    fields = "__all__"
而这一观点是正确的

class ProjectViewSet(viewsets.mixins.ListModelMixin,
                     viewsets.mixins.UpdateModelMixin,
                     viewsets.GenericViewSet):
  serializer_class = ProjectSerializer
  queryset = Project.objects.all()

  def put(self, request, *args, **kwargs):
    # return self.update(request, *args, **kwargs) for all fields
    return self.partial_update(request, *args, **kwargs)  # partial
这就是我处理单一更新的方式。但取决于案例
请求。数据
包含对象数组。那我该怎么做呢

我按照文档创建了
ListSerializer

class ProjectListUpdateSerializer(serializers.ListSerializer):
  def update(self, instance, validated_data):
    project_mapping = {project.id: project for project in instance}
    data_mapping = {item['id']: item for item in validated_data}

    # Perform updates.
    ret = []
    for project_id, data in data_mapping.items():
      project = project_mapping.get(project_id, None)
      if project is None:
        pass
      else:
        ret.append(self.child.update(project, data))

    return ret
然后将序列化程序实现到ModelSerializer中

class ProjectSerializer(serializers.ModelSerializer):
  class Meta:
    model = Project
    fields = "__all__"
    list_serializer_class = ProjectListUpdateSerializer

但是当我发送要更新的对象数组时。应用的视图中的单数
put
方法…

您可能需要在ProjectViewSet的put方法中使用的序列化程序中传递参数
many=True
serializer=ProjectSerializer(many=True)