2017-09-05 47 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' –

相關問題