Django – 覆盖保存方法时检查旧值和新值之间的差异
发布时间:2020-12-16 23:28:49 所属栏目:Python 来源:网络整理
导读:谢谢你的时间. 我在Django 1.4中,我有以下代码:它是我的Quest模型的覆盖保存方法. @commit_on_successdef save(self,*args,**kwargs): from ib.quest.models.quest_status_update import QuestStatusUpdate created = not self.pk if not created: quest =
谢谢你的时间.
我在Django 1.4中,我有以下代码:它是我的Quest模型的覆盖保存方法. @commit_on_success def save(self,*args,**kwargs): from ib.quest.models.quest_status_update import QuestStatusUpdate created = not self.pk if not created: quest = Quest.objects.get(pk=self) # CHECK FOR SOME OLD VALUE super(Quest,self).save(*args,**kwargs) 我找不到一个聪明的做法.对于我正在更新的对象,为了找出一个旧的实例值,对我来说,似乎非常愚蠢. 有没有更好的方法来做到这一点? 谢谢你们. 弗朗西斯科 解决方法
Django不会缓存模型实例的旧值,因此您需要自己执行此操作或在保存之前执行其他查询.
一种常见的模式是使用预先保存的信号(或者将这些代码直接放在你的save()方法中),如你所做的那样): old_instance = MyModel.objects.get(pk=instance.pk) # compare instance with old_instance,and maybe decide whether to continue 如果要保留旧值的缓存,那么您可能会在查看代码中执行此操作: from copy import deepcopy object = MyModel.objects.get(pk=some_value) cache = deepcopy(object) # Do something with object,and then compare with cache before saving django开发人员还有a recent discussion以及其他一些可能的解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读