Django-Rest-Fram中扩展用户模型的补丁方法

2024-10-03 02:42:57 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django-Rest框架中创建一个带有扩展用户模型的补丁方法让我感到困惑。希望你们能帮忙。在

我的扩展用户模型:

class Profile(models.Model):
    user = models.OneToOneField(User, unique=True)
    bio = models.CharField

我的序列化程序:

^{pr2}$

我的视图集:

class UserUpdateAPIView(ReadOnlyModelViewSet):
queryset = User.objects.all()
serializer_class = UserEditSerializer

@detail_route(methods=['PATCH'])
def edit(self, request):
    user_obj = User.objects.get(user__id=request.user.id)
    print(user_obj)
    serializer = UserEditSerializer(user_obj, data=request.data, partial=True)
    print(request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data)
    return Response(status=status.HTTP_400_BAD_REQUEST)

与邮递员一起发送的数据(json)

{“电子邮件”:231@sda.com“,“profile”:{“bio”:“Cant send request”}}

错误:

Profile.Bio cant response true data

照片:

enter image description here


Tags: 用户模型trueobjdataobjectsmodelsrequest
1条回答
网友
1楼 · 发布于 2024-10-03 02:42:57

UserEditSerializer的模型是Profile类。但您尝试将其作为对象User实例传递。您需要更改序列化程序类:

class UserEditSerializer(ModelSerializer):
    bio = serializers.CharField(source='profile.bio')
    class Meta:
        model = User
        fields = [
            'username',
            'email',
            'first_name',
            'last_name',
            'bio',
        ]

或视图:

^{pr2}$

升级版

要使嵌套关系可写,您需要重写序列化程序的create和{}方法,请参阅doc中的详细信息。 示例:

^{3}$

您还需要发布这样的数据{ "email": "231@sda.com", "bio": "Cant send request" }。在

相关问题 更多 >