You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django REST Framework用户资料修改接口问题:资料无法保存

问题分析与代码修正

你的代码存在几个核心问题导致资料无法保存:

  • 错误使用POST方法处理更新逻辑,REST规范中更新资源应使用PUT/PATCH
  • 序列化器未实现update方法,反而错误重写了create方法(create用于新建资源,而非更新)
  • 视图中未调用序列化器的save()方法,验证通过后没有执行保存动作
  • 获取当前用户的方式错误,Token认证通过后可直接从request.user获取,无需手动查询Token
  • 权限设置不合理,应限制仅登录用户可修改自身资料

修正后的serializers.py

from rest_framework import serializers
from .models import CustomUser

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = CustomUser
        fields = ("first_name", )

    def update(self, instance, validated_data):
        # 从validated_data中获取first_name,若未传则保留原有值
        instance.first_name = validated_data.get('first_name', instance.first_name)
        instance.save()
        return instance

修正后的views.py

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status, permissions, authentication
from .serializers import ProfileSerializer

class ProfileAPIView(APIView):
    serializer_class = ProfileSerializer
    permission_classes = [permissions.IsAuthenticated]  # 仅登录用户可访问
    authentication_classes = [authentication.TokenAuthentication]

    def get_object(self):
        # 返回当前登录的用户实例
        return self.request.user

    def put(self, request):
        user = self.get_object()
        # partial=True允许仅更新部分字段
        serializer = ProfileSerializer(user, data=request.data, partial=True)
        serializer.is_valid(raise_exception=True)
        serializer.save()  # 触发序列化器的update方法完成保存
        return Response(
            {"msg":"Profile Updated Successfully", "data": serializer.data}, 
            status=status.HTTP_200_OK
        )

    # 兼容PATCH方法(与PUT逻辑一致,支持部分更新)
    def patch(self, request):
        return self.put(request)

关键说明

  1. 使用PUT/PATCH方法处理更新,partial=True允许仅提交需要修改的字段
  2. 序列化器实现update方法,直接操作传入的用户实例完成更新
  3. 通过request.user直接获取当前登录用户,避免冗余的Token查询
  4. 权限改为IsAuthenticated,确保只有登录用户能修改自身资料
  5. 必须调用serializer.save()才能触发数据保存动作

内容的提问来源于stack exchange,提问作者Harsh Kathiriya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:35:01