gpt4 book ai didi

python - 如何使用 django 和 rest 框架更新用户数据?

转载 作者:行者123 更新时间:2023-12-02 00:42:06 25 4
gpt4 key购买 nike

尝试更新用户时出现以下消息:“具有此用户名的用户已存在”

我有一个标准的 Django 用户模型和另一个扩展的配置文件模板。

如何更新此数据,包括用户个人资料。

谢谢。

模型

class Profile(User):
nome_empresa = models.CharField(max_length=200)
cnpj = models.CharField(max_length=15)

def __str__(self):
return self.nome_empresa

序列化器

class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('nome_empresa', 'cnpj')


class UserSerializer(serializers.ModelSerializer):
profile = ProfileSerializer()
class Meta:
model = User
fields = ('username', 'email', 'first_name', 'last_name', 'profile')

查看

class usuario(APIView):


def patch(self, request, format=None):

user = UserSerializer(data=request.data)

if user.is_valid():
user.update(instance=request.user)
return Response(HTTP_200_OK)

return Response(user.errors)

最佳答案

django-rest-framework 默认不更新嵌套序列化器。要更新配置文件对象,您需要重写序列化程序的更新方法。

class UserSerializer(serializers.ModelSerializer):
profile = ProfileSerializer()

def update(self, instance, validated_data):
"""Override update method because we need to update
nested serializer for profile
"""
if validated_data.get('profile'):
profile_data = validated_data.get('profile')
profile_serializer = ProfileSerializer(data=profile_data)

if profile_serializer.is_valid():
profile = profile_serializer.update(instance=instance.profile)
validated_data['profile'] = profile

return super(UserSerializer, self).update(instance, validated_data)

class Meta:
model = User
fields = ('username', 'email', 'first_name', 'last_name', 'profile')

关于python - 如何使用 django 和 rest 框架更新用户数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46061406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com