Невозможно создать новый объект модели в наборе представлений модели остаточной структуры django: объект «Пользователь» не может быть подписан - PullRequest
0 голосов
/ 09 июля 2019

У меня есть проект Django Rest Framework.Я пытаюсь переопределить метод 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 Ответ

1 голос
/ 09 июля 2019

request.user возвращает объект User из базы данных, это не dict; следовательно, ваша request.user['id'] операция подписки, как ожидается, завершится неудачей.

Вам необходимо получить атрибут id объекта User:

request.user.id

Итак, сделайте data dict как:

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