Django Rest Framework 序列化程序更新方法不保存对象
Django Rest Framework serializer update method does not save object
我已经覆盖了我的一个序列化程序的更新方法,以便在保存对象之前调用模型的方法。像这样:
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()
。我该如何解决这个问题?感谢您的帮助。
调用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)
我已经覆盖了我的一个序列化程序的更新方法,以便在保存对象之前调用模型的方法。像这样:
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()
。我该如何解决这个问题?感谢您的帮助。
调用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)