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