【发布时间】:2012-10-09 05:48:44
【问题描述】:
感谢您的宝贵时间。
我使用的是 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)
我找不到这样做的聪明方法。对我当前正在更新的对象进行新查询以找出旧的实例值对我来说似乎很愚蠢。
有没有更好的方法来做到这一点?
谢谢大家。
弗朗西斯科
【问题讨论】:
-
更新和保存的上下文是什么? IE。直接在模型上的视图中或通过 ModelForm 等?
-
嗯,这真的相关吗?我正在保存方法,更新实例。但无论如何,这个电话是从一个视图中发出的,我在那里打电话给
quest.save() -
我不确定是否有干净的方法可以做到这一点。您可以将旧对象传递给
save()方法或在save()中查询它。 -
是的,它是相关的。如果您使用的是模型表单,它会将实例(旧值)和新值存储在其自身中。所以如果你覆盖它的 save() 你可以得到字段值和 self.instance 字段值。直接在模型上进行 - 我使用下面建议的信号。我将使用 django-reversion 举一个例子。
-
嗯...这非常好!感谢您的洞察力。我去查一下!
标签: django orm django-models django-signals