如何将JSON数据PUTPOST到ListSerializer?

如何将JSON数据PUTPOST到ListSerializer?,第1张

如何将JSON数据PUT / POST到ListSerializer?

默认情况下,Django
REST框架假定您不处理批量数据的创建,更新或删除。这是因为99%的人没有处理批量数据创建,而DRF将其余1%的资源留给了第三方库。

在Django REST框架2.x和3.x中,为此存在第三方软件包。

现在,您正在尝试进行批量创建,但返回的错误提示

无效数据。希望有字典,但有清单

这是因为您发送的是要创建的对象列表,而不只是发送一个。你可以解决这个问题的一些方法,但最简单的是只覆盖

get_serializer
你的观点,以对添加
many=True
标志到串行器时,它是一个列表。

def get_serializer(self, *args, **kwargs):    if "data" in kwargs:        data = kwargs["data"]        if isinstance(data, list): kwargs["many"] = True    return super(MyViewSet, self).get_serializer(*args, **kwargs)

这将使Django
REST框架知道

ListSerializer
批量创建对象时自动使用。现在,对于其他 *** 作(如更新和删除),您将需要覆盖默认路由。我将假设您正在使用Django
REST框架bulk提供的路由,但是您可以自由使用所需的任何方法名称。

您将需要为批量

PUT
PATCH
视图添加方法。

from rest_framework.response import Responsedef bulk_update(self, request, *args, **kwargs):    partial = kwargs.pop("partial", False)    queryset = self.filter_queryset(self.get_queryset))    serializer = self.get_serializer(instance=queryset, data=request.data, many=True)    serializer.is_valid(raise_exception=True)    self.perform_update(serializer)    return Response(serializer.data)def partial_bulk_update(self, *args, **kwargs):    kargs["partial"] = True    return super(MyView, self).bulk_update(*args, **kwargs)

默认情况下,这将无法立即使用,因为Django REST框架不支持批量更新。这意味着您还必须实现自己的批量更新。当前代码将像处理批量更新一样处理批量更新,这就是以前的旧批量更新程序包的工作方式。

尽管您不要求批量删除,但这并不是特别困难。

def bulk_delete(self, request, *args, **kwargs):    queryset = self.filter_queryset(self.get_queryset())    self.perform_delete(queryset)    return Response(status=204)

与旧的批量插件相同,这具有删除所有对象的相同效果。

此代码均未经过测试。 如果它不起作用,请将其作为详细示例。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5662756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存