【问题标题】:Django Rest Framework serializer update method does not save objectDjango Rest Framework序列化程序更新方法不保存对象
【发布时间】:2020-03-05 12:38:40
【问题描述】:

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

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()。我该如何解决这个问题?感谢您的帮助。

【问题讨论】:

  • model_method 有什么作用?它是否修改了实例的任何属性?
  • 是的,这正是它的作用
  • 您是否尝试在最后(即第一行之后)返回super() 调用而不是调用instance.save()
  • 你能把它写出来作为答案吗?

标签: django django-rest-framework django-serializer


【解决方案1】:

您需要在调用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)  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-22
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 2021-07-30
    相关资源
    最近更新 更多