0

在更新一行之前,我想将其当前结果保存到另一个表中。目前我正在使用 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)

例如,如果我将国家名称从 USA 更改为 Australia,pdb 中的 obj.name 将显示更新后的澳大利亚名称,而不是更新前的名称 USA。

我错过了什么?

4

2 回答 2

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)
于 2013-06-13T01:00:55.417 回答
0

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

于 2013-06-12T23:17:51.890 回答