CRUD for nested servers django-rest-framework

0

I have the following model

    class UserProfile(models.Model):
       user = models.OneToOneField(User, on_delete=models.CASCADE)
       avatar = models.FileField(upload_to='users', default='users/default.png', null=True, blank=True)
       remember_token = models.TextField(blank=True, null=True)

And the following serializers

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

    class ProfileSerializer(serializers.ModelSerializer):
       user = UserSerializer(required=True)

       class Meta:
          model = UserProfile
          fields = ('user', 'avatar')

       def create(self, validated_data):
          user_data = validated_data.pop('user')
          usuario = User.objects.create(**user_data)
          profile = UserProfile.objects.create(user=usuario, avatar=validated_data.pop('avatar'))
          return profile

       def update(self, instance, validated_data):
         print("HELP!")

This generates the following form

the list and create works well, the problem is that I do not know how to update the information of this anilored serilizer, my view is as follows.

class ProfileViewSet(ModelViewSetMixin):
   serializer_class = ProfileSerializer
   queryset = UserProfile.objects.all()

   def list(self, request, *args, **kwargs):
      queryset = self.filter_queryset(self.queryset)
      serializer = self.get_serializer(queryset, many=True)
      return Response(serializer.data)

   def create(self, request, *args, **kwargs):
      serializer = self.get_serializer(data=request.data)
      if serializer.is_valid():
        self.perform_create(serializer)
        return Response(serializer.data, status=status.HTTP_201_CREATED)
      else:
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

   def update(self, request, *args, **kwargs): 
      instance = self.get_object()
      serializer = self.get_serializer(instance, data=request.data)
      if serializer.is_valid():
        self.perform_update(serializer)
        return Response(serializer.data, status=status.HTTP_201_CREATED)
      else:
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

some idea of how to perform the CRUD with nested serilizers, in the update, in the modelViewSet, it does not pass from the valid, it gives me a user error already exists, and it does not even reach the update of the modelSerializer UserProfile

    
asked by Jefferson Tenecota 14.06.2018 в 23:53
source

0 answers