Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django如何在预保存功能中获取旧值和新值_Django_Django Orm_Django Signals - Fatal编程技术网

django如何在预保存功能中获取旧值和新值

django如何在预保存功能中获取旧值和新值,django,django-orm,django-signals,Django,Django Orm,Django Signals,假设我有一个名为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) 调用以下命

假设我有一个名为
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)
调用以下命令时,
名称是旧值还是新值

a = A.objects.create(name="John")
a.name = "Lee"
a.save()
实例
保存的实际实例

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

@receiver(pre_save, sender=A)
def signal_product_manage_latest_version_id(sender, instance, update_fields=None, **kwargs):
    try:
        old_instance = A.objects.get(id=instance.id)
    except A.DoesNotExist:  # to handle initial object creation
        return None  # just exiting from signal
    # your code to with 'old_instance'

还要记住,如果对象是第一次保存的,它的旧版本不会显示在数据库中,因此
objects.get
将导致异常。@zen11625谢谢您提供的信息。我已经更新了处理这种情况的答案