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谢谢您提供的信息。我已经更新了处理这种情况的答案