首页 > 解决方案 > DRF 如何使用@action 更新电子邮件?

问题描述

当我尝试更新经过身份验证的用户但它正在创建新用户时。问题出在哪里?

看法

class UserViewSet(mixins.RetrieveModelMixin,
                     mixins.UpdateModelMixin,
                     mixins.DestroyModelMixin,
                     viewsets.GenericViewSet):

    permission_classes = (IsAuthenticated,)
    serializer_class = UserSerializer

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

行动

@action(methods=['PATCH'], detail=False)
        def change_email(self, *args, **kwargs):
            user = self.get_object()
            serializer = serializers.UserEmailSerializer(data=self.request.data, context={'request': self.request})
            serializer.is_valid(raise_exception=True)
            serializer.save()
            self.send_email(user.email)
            return Response({'Confirm yours new email'}, status=status.HTTP_200_OK)

用于操作的序列化程序

class UserEmailSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('id', 'email')
        read_only_fields = ('id',)

标签: djangoserializationdjango-rest-framework

解决方案


推荐阅读