Django 3,DRF - 使用 @action 更新ModelViewSet

问题描述

此视图的目的是将用户登录名更改为数据库中不存在的另一个登录名。

序列化程序正确检查验证但不保存实例。我怀疑这是代码中某处的轻微遗漏。如果您提供任何可以帮助您解决此问题的提示,我将不胜感激

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    permission_classes = [IsAuthenticated,]
    serializer_classes = {
        'update_username': UpdateUsernameSerializer,'update_password': ChangePasswordSerializer,}
    default_serializer_class = UserSerializer

    def get_serializer_class(self):
        return self.serializer_classes.get(self.action,self.default_serializer_class)

    @action(detail=False,methods=['post','get'])
    def update_username(self,request):
        queryset = User.objects.filter(pk=self.request.user.id)
        serializer = UpdateUserSerializer(queryset,many=True)
        return Response(serializer.data)
class UpdateUsernameSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('username')
        extra_kwargs = {
            'username': {'required': True},}

    def validate_username(self,value):
        user = self.context['request'].user
        if User.objects.exclude(pk=user.pk).filter(username=value).exists():
            raise serializers.ValidationError("This username is already in use.")
        return value

    def update(self,instance,validated_data):

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

        return instance

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...