gpt4 book ai didi

python - 从post请求中获取数据并创建新的对象模型错误: 'dict' object has no attribute 'data'

转载 作者:行者123 更新时间:2023-12-01 07:36:50 25 4
gpt4 key购买 nike

我有一个 Django Rest 框架项目。我想在 django Rest 框架中采用模型 View 集的标准创建方法。我想根据传入的数据创建一个新的模型对象,但我也想覆盖一些字段(如果它们是通过 url 参数传入的)。

因此,如果没有 url 参数 => 仅根据 post 请求创建一个基于默认对象。如果有命名空间参数 => 根据 post 请求创建默认对象,但使用命名空间 url 参数。如果有命名空间和路径参数 => 根据 post 请求创建默认对象,但使用命名空间和路径 url 参数。:

我收到以下错误:

AttributeError at /api/v2/preferences/namespace1/
'dict' object has no attribute 'data'
Request Method: POST
Request URL: http://127.0.0.1:8000/api/v2/preferences/namespace1/
Django Version: 2.2.1
Exception Type: AttributeError
Exception Value:
'dict' object has no attribute 'data'
Exception Location: C:\Users\jandali\AppData\Local\Programs\Python\Python37-32\lib\site-packages\rest_framework\mixins.py in create, line 19
Python Executable: C:\Users\jandali\AppData\Local\Programs\Python\Python37-32\python.exe
Python Version: 3.7.3
Python Path:
['C:\\Users\\jandali\\desktop\\ozone-backend\\ozone-framework-python-server',
'C:\\Users\\jandali\\AppData\\Local\\Programs\\Python\\Python37-32\\python37.zip',
'C:\\Users\\jandali\\AppData\\Local\\Programs\\Python\\Python37-32\\DLLs',
'C:\\Users\\jandali\\AppData\\Local\\Programs\\Python\\Python37-32\\lib',
'C:\\Users\\jandali\\AppData\\Local\\Programs\\Python\\Python37-32',
'C:\\Users\\jandali\\AppData\\Roaming\\Python\\Python37\\site-packages',
'C:\\Users\\jandali\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages']
Server time: Tue, 9 Jul 2019 21:36:07 +0000

这是模型 View 集:

    @permission_classes((IsAuthenticated))
def create(self, request, *args, **kwargs):
# print(request)
namespace = self.kwargs.get('namespace', None)
path = self.kwargs.get('path', None)
if namespace is None and path is None:
return super().create(request)
if namespace and path is None:
data = {
"person":self.request.user,
'version':self.request.data['version'],
'namespace':namespace,
'path':self.request.data['path'],
'value':self.request.data['value'],
'user_id':self.request.user.id,
}
return super().create(data)
if namespace and path:
data = {
"person":self.request.user,
'version':self.request.data['version'],
'namespace':namespace,
'path':path,
'value':self.request.data['value'],
'user_id':self.request.user.id,
}
return super().create(data)

最佳答案

我确定您直接或间接继承了CreateModelMixin。您已重写 create 方法并将字典传递给其 super。这就是它失败的地方。

相反,您可以自己处理此类中的所有内容,或者重写 perform_create 方法,或者在序列化程序中定义 save 方法。在最后两个选项中,您需要一个序列化器。

更好的选择是处理body中的完整数据。您不必从 URL 参数中获取内容。那样会更加 Restful 。

关于python - 从post请求中获取数据并创建新的对象模型错误: 'dict' object has no attribute 'data' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56958696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com