django如何在pre_save功能中获取旧值和新值

时间:2018-08-09 20:46:25

标签: django django-orm django-signals

Imagen我有一个模型A,它有一个名为name的字段。如何获得pre_save信号中的先前值和新值?

@receiver(pre_save, sender=A)
def signal_product_manage_latest_version_id(
        sender, instance, update_fields=None, **kwargs):
    if 'name' in update_fields:
        print(instance.name)

当我调用以下代码时,name是旧值还是新值?

a = A.objects.create(name="John")
a.name = "Lee"
a.save()

1 个答案:

答案 0 :(得分:4)

doc instance开始,正在保存的实际实例

通过使用 A 方法显式调用 .get() 旧实例

@receiver(pre_save, sender=A)
def signal_product_manage_latest_version_id(sender, instance, update_fields=None, **kwargs):
    old_instance = A.objects.get(id=instance.id)
    # your code