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)