2017-09-05 46 views
0

当试图更新用户时,出现以下消息:“具有此用户名的用户已存在”如何使用django和rest框架来更新用户数据?

我有一个标准的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) 

回答

1

Django的REST的架构不更新默认情况下,嵌套的序列化。要更新配置文件对象,您需要覆盖序列化程序的更新方法。

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') 
+0

你是什么意思'place_data'是它的错字? –

+0

是,已编辑答案 – arjun27

+0

发生错误:TypeError:update()缺少1所需的位置参数:'validated_data' –

相关问题