首页 > 解决方案 > 无法在 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)

标签: pythondjangodjango-rest-frameworkdjango-views

解决方案


request.user从数据库返回一个User对象,它不是dict; 因此您的request.user['id']订阅操作将按预期失败。

您需要获取 User 对象的id 属性

request.user.id

所以,让data字典像:

data = {
    ...
    ...   
    'user_id': request.user.id,
}

推荐阅读