Метод обновления сериализатора Django Rest Framework не сохраняет объект - PullRequest
1 голос
/ 09 ноября 2019

Я переопределил метод обновления для одного из моих сериализаторов для вызова метода модели перед сохранением объекта. Примерно так:

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = [...]

    def update(self, instance, validated_data):
        instance.model_method()
        instance.save()
        return instance

На мой взгляд, я сохраняю сериализатор с помощью serializer.save() и, конечно, устанавливаю его с помощью MyModelSerializer(instance, data=request.data). Тем не менее, мой экземпляр не сохраняется. Простое удаление метода обновления сохраняет экземпляр, но, очевидно, не вызывает model_method(). Как я могу исправить эту проблему? Спасибо за любую помощь.

1 Ответ

2 голосов
/ 10 ноября 2019

После вызова instance.model_method() необходимо вызвать метод super(), чтобы сохранить данные в обновленном экземпляре.

Проблема с подходом, упомянутым выше в вопросе, заключается в том, что validated_data нигде не используется для save(), который оставляет экземпляр как есть.

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = [...]

    def update(self, instance, validated_data):
        instance.model_method() # call model method for instance level computation

        # call super to now save modified instance along with the validated data
        return super().update(instance, validated_data)  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...