Нет метода PUT в DRF с использованием ModelViewset - PullRequest
0 голосов
/ 05 ноября 2019

Я использую Django 2.2 с Django Rest Framework 3.7. У меня есть такой класс:

class UserViewSet(viewsets.ModelViewSet):

    permission_classes = [AllowAny]
    serializer_class = UserSerializer
    queryset = User.objects.all()

    def update(self, request, *args, **kwargs):
        import pdb;pdb.set_trace()

Я создал UserSerializer следующим образом:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'email', 'name', 'password')
        write_only_fields = ('password',)
        read_only_fields = ('id',)

    def create(self, validated_data):
        user = User.objects.create(
            email=validated_data['email'],
            name=validated_data['name'],
        )

        user.set_password(validated_data['password'])
        user.save()

        return user

    def update(self, instance, validated_data):
        print('lalala from serialzier')
        import pdb;pdb.set_trace()

        instance.username = validated_data['username']
        instance.save()
        return instance

Отображаются только разрешенные методы - Разрешить: GET, POST, HEAD, OPTIONS

Интересно, почему я не могу выполнить такие действия, как PUT, DELETE, RETRIEVE. По умолчанию они поддерживаются с помощью ModelViewset согласно документации.

В показанном коде не вызывается ни метод update (), ни метод views.py update (). Любая подсказка будет оценена.

1 Ответ

0 голосов
/ 06 ноября 2019

Это отвечает на ваш вопрос?


class UserViewSet(viewsets.ModelViewSet):

    permission_classes = [AllowAny]
    serializer_class = UserSerializer
    queryset = User.objects.all()

    def put(self, request, id, format=None):
        ...

    def delete(self, request, id, format=None):
        ...
...