【问题标题】:Return objects with get_object and Retrieve UpdateAPIView使用 get_object 返回对象并检索 UpdateAPIView
【发布时间】:2021-10-05 17:13:48
【问题描述】:

我正在尝试使用 put 方法并使用带有 RetrieveUpdateAPIView 的 get_object 的令牌返回用户模型实例的更改。但我只得到用户数据:

{
    "id": int,
    "username": "",
    "email": "",
    "is_staff": bool
}

有没有办法得到这样的?:

{
 "user": {
    "id": int,
    "username": "",
    "email": "",
    "is_staff": bool
  },
 "token": ""
}

这是为了不改变前端的逻辑;获取授权令牌:user.token

这是我的序列化器:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'is_staff')

这是我的观点:

class UserAPI(generics.RetrieveUpdateAPIView):
    permission_classes = [permissions.IsAuthenticated]
    serializer_class = UserSerializer

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

【问题讨论】:

  • 请分享您要求的代码部分。但是,您可以在这种情况下使用嵌套调用
  • 我添加了代码,谢谢。
  • 这个 "token": "" 来自哪里或者它的用途是什么?
  • 来自 LoginView:serializer_class = LoginUserSerializer def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.validated_data return Response({ "user": UserSerializer(user, context=self.get_serializer_context()).data, "token": AuthToken.objects.create(user)[1] })

标签: django api django-rest-framework django-views backend


【解决方案1】:
class UserSerializer(serializers.ModelSerializer):
class Meta:
    model = User
    fields = ('id', 'username', 'email', 'is_staff')

class UserAPI(generics.RetrieveUpdateAPIView):
permission_classes = [permissions.IsAuthenticated]
serializer_class = UserSerializer

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

serializer_class = LoginUserSerializer      
def post(self, request, *args, **kwargs):         
   serializer = self.get_serializer(data=request.data)         
   serializer.is_valid(raise_exception=True)         
   user = serializer.validated_data
   token = AuthToken.objects.create(user)[1]         
   return Response({"user": UserSerializer(user, 
         context=self.get_serializer_context()).data, 
        "token":  token        })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多