Django Rest Framework: обновление и удаление текущего пользователя без предоставления ПК - PullRequest
0 голосов
/ 11 февраля 2019

Я знаю, что многие люди уже спрашивали об обработке с текущим пользователем, но я не смог найти решение, поэтому я отправил это.

Что я хочу сделать, это получить, поместить и удалить текущего пользователя без предоставленияpk.Я хочу установить конечную точку как users/my_account

Мой текущий код здесь

class MyAccountDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = CustomUser.objects.all()
    serializer_class = UserSerializer

    def get(self, request):
        serializer = UserSerializer(request.user)
        return Response(serializer.data)

И теперь я могу получить информацию о текущем пользователе, но когда я пытаюсь обновить или удалить текущего пользователя,

AssertionError: Ожидаемое представление MyAccountDetail для вызова с аргументом ключевого слова URL-адреса с именем "pk".Исправьте ваш URL conf или установите атрибут .lookup_field в представлении правильно.

Как мне решить эту проблему?

Обновление

urlpatterns = [

    path('users/my_account', views.MyAccountDetail.as_view()),
]

1 Ответ

0 голосов
/ 11 февраля 2019

В этом случае вам потребуется переопределить метод get_object () в вашем представлении MyAccountDetail.Например:

from rest_framework.permissions import IsAuthenticated


class MyAccountDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = CustomUser.objects.all()
    serializer_class = UserSerializer
    permission_classes = (IsAuthenticated,)

    def get_object(self):
        return self.request.user

Это необходимо сделать, потому что по умолчанию метод get_object ищет в URL-адресе lookup_url_kwarg или lookup_field и из этого он попытается получить объект, используя pk или все, что вы настроили в lookup_field или lookup_url_kwarg .

FYI, я также добавил класс разрешений, потому что без него self.request.user будетанонимный пользователь, следовательно, выдаст ошибку.

...