Как использовать операцию PUT без ID в url с помощью django
Я пытался реализовать метод PUT без ID, хотя это не соответствует принципу REST. Однако мне просто интересно, можно ли это сделать, потому что я могу легко получить экземпляр User из self.request.user
. Итак, если я сделаю представление
class ProfileViewSet(mixins.ListModelMixin,
mixins.UpdateModelMixin,
viewsets.GenericViewSet):
serializer_class = UserProfileSerializer
permission_classes = [IsAuthenticated]
queryset = User.objects.all()
lookup_field = 'username'
def get_object(self):
try:
return User.objects.get(pk=self.request.user.id)
except User.DoesNotExist:
raise NotFound()
def update(self, request, *args, **kwargs):
............???
К сожалению, я не смог достичь функции обновления, так как она всегда выбрасывает исключение, говорящее "Метод PUT не разрешен".
Заранее спасибо.
Настаиваете ли вы на выполнении update
на том же url, что и list
и create
? (похоже, именно это вы и пытаетесь сделать)
Если нет, вы можете зарегистрировать другое действие, которое выполнит обновление так, как вы хотите:
# will be accessible on <list view url>/update/
@action(methods=["PUT"], detail=False, url_path="update")
def update_current_user(self, request):
...
Выполнение этого на том же url также возможно, но потребует еще некоторой гимнастики. Как минимум, вам нужно будет обновить связку между методами запроса и методами представления. Один из способов сделать это описан здесь в документации. Вам также может понадобиться удалить UpdateModelMixin
.