Пароль пользовательского обновления DRF получил KeyError: 'request' - PullRequest
1 голос
/ 06 августа 2020

Когда я хочу обновить полученный пароль,

 user = self.context['request'].user
KeyError: 'request'

Может ли кто-нибудь помочь мне с этим?

сериализатор: Пользовательский сериализатор

class UserPasswordChangeSerializer(serializers.Serializer):
    old_password = serializers.CharField(required=True)
    password = serializers.CharField(required=True)

    class Meta:
        model = User
        fields = ('old_password', 'password')

    def validate_old_password(self, data):
        user = self.context['request'].user
        if not user.check_password(data):
            raise serializers.ValidationError(
                {'old_password': 'Wrong password.'}
            )
        return data

    def update(self, instance, validated_data):
        instance.set_password(validated_data['password'])
        return super().update(instance)

Мой вид действий Мой вид действий

@action(methods=['patch'], detail=True)
    def change_password(self, request, *args, **kwargs):
        user = self.get_object()
        user.serializer = UserPasswordChangeSerializer(data=request.data)
        user.serializer.is_valid(raise_exception=True)
        user.serializer.save()
        return Response(status=status.HTTP_204_NO_CONTENT)

1 Ответ

1 голос
/ 06 августа 2020

Вам необходимо передать request в качестве переменной контекста в сериализатор

@action(methods=['patch'], detail=True)
def change_password(self, request, *args, **kwargs):
    user = self.get_object()
    user.serializer = UserPasswordChangeSerializer(data=request.data,
                                                   <b>context={'request': request})</b>
    user.serializer.is_valid(raise_exception=True)
    user.serializer.save()
    return Response(status=status.HTTP_204_NO_CONTENT)

Ссылка: Включение дополнительного контекста в сериализатор

...