2017-09-05 12 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

ジャンゴ・静止フレームワークは、デフォルトでは、ネストされたシリアライザを更新しません。プロファイルオブジェクトを更新するには、シリアライザの更新メソッドをオーバーライドする必要があります。

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()missing 1必要な位置引数: 'validated_data' –

関連する問題