Обновление полей объекта внешнего ключа в 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