python - 无法在 django rest 框架模型视图集中创建新模型对象:“用户”对象不可下标
问题描述
我有一个 django rest 框架项目。我正在尝试覆盖 create 方法,以便如果有某些参数或参数传递到 url,它将覆盖表单中传递的一些默认信息。
我通过创建将用于创建新对象的数据对象来做到这一点。现在,我正在通过 using 抓住用户,request.user
但它给了我以下错误:
TypeError at /api/v2/preferences/namespace1/
'User' object is not subscriptable
我不知道如何解决它。
这是我的模式视图集创建方法覆盖的代码:
@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':request.POST['version'],
'namespace':namespace,
'path':request.POST['path'],
'value':request.POST['value'],
'user_id':request.user['id'],
}
return super().create(data)
if namespace and path:
data = {
"person":self.request.user,
'version':request.POST['version'],
'namespace':namespace,
'path':path,
'value':request.POST['value'],
'user_id':request.user['id'],
}
return super().create(data)
解决方案
request.user
从数据库返回一个User
对象,它不是dict
; 因此您的request.user['id']
订阅操作将按预期失败。
您需要获取 User 对象的id
属性:
request.user.id
所以,让data
字典像:
data = {
...
...
'user_id': request.user.id,
}
推荐阅读
- javascript - 无法将两个 api 调用链接到 mongo 数据库
- vue.js - 如何在导出默认 {} 中使用 Toasted
- javascript - 将键值(对象)对添加到数组中的所有对象
- javascript - 使用模块功能的提供者创建范围模块
- windows - Jenkins、git 'advanced' 命令(fetch、diff 等)和 ssh-agent (Windows Server)
- c# - Visual Studio 认为我想连接到 SQL Server 而不是 MySQL?
- javascript - javascript - 在不滚动容器的情况下将内容移动到视图中
- android - 谷歌登录,当用户需要重新登录帐户时如何正确处理错误情况
- python-3.x - 如何根据使用python复制的键值比较csv文件中列的值
- ios - 如何在 UIButton 标题文本中间添加图像?