gpt4 book ai didi

django - 查看 django Rest Framework 中 post_save 中的对象更改

转载 作者:行者123 更新时间:2023-12-02 01:21:09 25 4
gpt4 key购买 nike

我很好奇是否有一种方法可以查看使用 Django Rest Framework 保存对象后发生了什么变化。我有一些特殊行为,我需要检查某个字段是否已从其原始值更改,我希望使用 generics.RetrieveUpdateDestroyAPIView 上的 post_save 来处理该字段。

我的第一个想法是使用 pre_save 进行检查,但似乎 pre_save 的对象参数已经应用了更改。

最佳答案

django Rest框架版本2.3.12的旧答案:

要检查更新时是否有任何更改,您必须将未更改的模型实例(self.object)与更改后的模型实例(serializer.object)进行比较。

传递给 pre_save 方法的对象参数是尚未将新更改保存在数据库中的 Serializer.object。

未更改的模型实例是使用 self.get_object_or_none() 从数据库中获取的 self.object。将其与 pre_save 方法中的 obj 参数进行比较。

def pre_save(self,obj):
unchanged_instance = self.object
changed_instance = obj
..... # comparison code

django Rest Framework 3.3 的新答案:

pre_savepost_save 不再有效。

现在您可以将任何预保存或后保存逻辑放置在 perform_update 中方法。例如:

def perform_update(self, serializer):
# NOTE: serializer.instance gets updated after calling save
# if you want to use the old_obj after saving the serializer you should
# use self.get_object() to get the old instance.
# other wise serializer.instance would do fine
old_obj = self.get_object()
new_data_dict = serializer.validated_data
# pre save logic
if old_obj.name != new_data_dict['name']:
do_something
.....
new_obj = serializer.save()
# post save logic
......

关于django - 查看 django Rest Framework 中 post_save 中的对象更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23249586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com