无法在Django Rest框架模型视图集中创建新的模型对象:“用户”对象不可下标

时间:2019-07-09 18:02:07

标签: python django django-rest-framework django-views

我有一个django rest框架项目。我试图覆盖create方法,以便如果在URL中传递了某些参数或参数,它将避免某些通过表单传递的默认信息。

我正在通过创建将用于创建新对象的数据对象来做到这一点。现在,我正在使用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)

1 个答案:

答案 0 :(得分:1)

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

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

request.user.id

因此,将data字典设为:

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