dar*_*rse 2 django django-serializer django-rest-framework
我已经覆盖了我的一个序列化程序的更新方法,以便在保存对象之前调用模型的方法。像这样:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = [...]
def update(self, instance, validated_data):
instance.model_method()
instance.save()
return instance
Run Code Online (Sandbox Code Playgroud)
在我看来,我正在使用 保存序列化程序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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3651 次 |
| 最近记录: |