Django Rest Framework序列化器更新方法不保存对象

2024-02-13

我已经重写了我的序列化器之一的更新方法,以在保存对象之前调用模型的方法。就像这样:

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)。但是,我的实例没有被保存。仅删除 update 方法即可保存实例,但不会调用model_method()明显地。我该如何解决这个问题?谢谢你的帮助。


你需要打电话super()之后的方法instance.model_method()调用以便将数据保存在更新的实例上。

问题中提到的上述方法的问题在于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)  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django Rest Framework序列化器更新方法不保存对象 的相关文章

随机推荐