SerializerMethodField только для чтения по умолчанию.Поэтому, когда ваш сериализатор проверяет данные, он извлекает ключ «животного» из данных для сохранения в модели.
Чтобы преодолеть это, можно переопределить функцию проверки сериализатора, чтобы он не удалял ключ животного изваши данные.Пример:
class HumanSerializer(serializers.ModelSerializer):
animal = SerializerMethodField()
def validate(self, data):
animal = data['animal']
# Any validation code for animal, if required
validated_data = super(HumanSerializer, self).validate(data)
validated_data['animal'] = animal
return validated_data
class Meta:
model = Human
fields = (
'id',
'animal', # <- animal is ForeignKey of Animal model
)
def get_animal(self, lead):
# blah blah blah
pass