【问题标题】:django how to get old value and new value in pre_save fucntiondjango如何在pre_save函数中获取旧值和新值
【发布时间】:2018-08-09 20:46:24
【问题描述】:

假设我有一个名为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()

【问题讨论】:

    标签: django django-orm django-signals


    【解决方案1】:

    来自docinstance的实际实例正在保存

    通过使用 .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 感谢您的信息。我已经更新了处理这种情况的答案
    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 2012-04-04
    • 2015-11-26
    • 2019-10-26
    • 1970-01-01
    • 2015-03-30
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多