问题描述
此视图的目的是将用户的登录名更改为数据库中不存在的另一个登录名。
序列化程序正确检查验证但不保存实例。我怀疑这是代码中某处的轻微遗漏。如果您提供任何可以帮助您解决此问题的提示,我将不胜感激
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 (将#修改为@)