14-----用户权限和开发事项
关于使用DRF时报错{"non_field_errors":["Invalid data. Expected a dictionary, but got list."]}的解决
心路历程:
这部分主要讲述我解决问题的过程,想要答案可跳过,直接看结尾。
由于对框架比较陌生,这个问题上我绕了很多弯路,以上注释均是弯路上留下的,每一条都是泪呀。拿到这个问题,我首先看了Django Rest Framework的官方文档,文档上说ModelSerializer本身就是支持多条数据的create的,但不支持update,只需要加上many=true就可以了,看到这个的时候我已经欲哭无泪了,这many原来的代码上就加着啊,无奈之下我只好在网上寻找各种解决方法,很多都是像我注释的一样,在serializer中各种改。经历过无数次失败后,我在create函数中输入了logger.debug("serache:", validated_data"),终于,真相大白了。
解决方法
其实我打印log只是想看看validated_data里面的数据到底是什么样的,但令我惊奇的是什么都没有打出来,连空行都没有,也就是说程序根本没有执行到这里,在viewsets中校验数据时就已经报错了,于是我查看了viewsets中关于接收数据格式的规定,并且在stackoverflow上找到了解决方案,只需将viewsets中的create方法覆盖掉即可。
def create(self, request, *args, **kwargs): # data = request.data['params'] print(request.data) serializer = self.get_serializer(data=request.data, many=isinstance(request.data, list)) try: serializer.is_valid(raise_exception=True) except Exception as e: print(e) self.perform_create(serializer) headers = self.get_success_headers(serializer.data) return HttpResponse(json.dumps(serializer.data, ensure_ascii=False), content_type="application/json")
many=isinstance(request.data, list))
使得接口可以接受单个的json数据,也可以接受list。
本文来自博客园,作者:王竹笙,转载请注明原文链接:https://www.cnblogs.com/edeny/p/12671804.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App