Обновление полей объекта внешнего ключа в drf

У меня есть две модели:

class User(models.Model):
    name = models.CharField(max_length=255)
    email = models.EmailFeild()
    password = models.CharField(max_length=255)

class Profile(models.Model):
    user = models.ForeignKeyField(User, on_delete=models.CASCADE)
    image = models.ForeignKeyField(to='media.images', on_delete=models.CASCADE)
    mobile = models.IntegerField()
    address = models.CharField(max_length=255)

Теперь я создаю API патч для обновления профиля. Теперь пользователь может также обновить электронную почту и свое имя.

class ProfileUpdateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = '__all__'

    def update(self, instance, validated_data):
        .........

Как мне принять данные модели User (email и имя) в полезной нагрузке профиля и обновить обе модели в моем сериализаторе?

В самом простом виде вы можете добавить два пользовательских поля в сериализатор:

class ProfileUpdateSerializer(serializers.ModelSerializer):
    name = serializers.CharField()
    email = serializers.EmailField()

И перепишите сериализатор следующим образом:

def update(self, instance, validated_data):
    name = validated_data.pop('name', '')
    email = validated_data.pop('email', '')
    instance = super().update(instance, validated_data)
    instance.user.email = email
    instance.user.name = name
    instance.user.save()
    return instance
Вернуться на верх