【问题标题】:Copying Django model row data before updating在更新之前复制 Django 模型行数据
【发布时间】:2013-06-12 23:15:46
【问题描述】:

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

我错过了什么?

【问题讨论】:

    标签: django django-models


    【解决方案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)
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-07
        • 1970-01-01
        • 2016-08-12
        • 2012-10-25
        • 2021-09-10
        • 2011-03-14
        • 2011-11-29
        • 1970-01-01
        相关资源
        最近更新 更多