在更新之前复制Django模型行数据

时间:2013-06-12 23:15:47

标签: django django-models

在更新行之前,我想将其当前结果保存到另一个表中。目前我正在使用pre_save但它似乎没有按预期工作。它为我提供了更新的数据,而不是预先更新的数据。

class Country(models.Model):
    name = models.CharField(max_length=16)

def make_copy(sender, **kwargs):
    obj = kwargs['instance']

pre_save.connect(make_copy, sender=Country)

例如,如果我将国家/地区名称从美国更改为澳大利亚,则pdb中的obj.name将显示更新后的澳大利亚名称,而不是预先更新的名称USA。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

您必须查询数据库才能获取原始对象。 instance具有更新的对象,可以将其保存到数据库中。

class Country(models.Model):
    name = models.CharField(max_length=16)

def make_copy(sender, **kwargs):
    obj = kwargs['instance']
    try:
        orig_obj = Country.objects.get(pk=obj.pk)
    except: #If it is a new object
        orig_obj = None

pre_save.connect(make_copy, sender=Country)

答案 1 :(得分:0)

以前的数据只存在于数据库中;你需要在你的处理程序中检索它。