繁体   English   中英

使用post_save而不是pre_save信号检测字段变化

[英]Detect field change using post_save instead of pre_save signal

当一个字段更改时,我需要执行一些操作。

由于此操作需要处理已保存的对象,因此无法使用pre_save信号,如下所示:

@receiver(pre_save, sender=reservation_models.Reservation)
def generate_possible_pairs(sender, instance, **kwargs):
    try:
        reservation_old = sender.objects.get(pk=instance.pk)
    except sender.DoesNotExist:
        pass # Object is new, so field hasn't technically changed, but you may want to do something else here.
    else:
        if not reservation_old.datetime == instance.datetime: # Field has changed
            do_something(instance) # It would be better to be sure instance has been saved

是否可以为此使用post_save信号?

我想避免向此模型添加临时属性。

使用post_save信号,您将无法从db检索以前的状态-但是为什么要使用信号呢?

class Reservation(models.Model):
    def save(self, *args, **kw):
        old = type(self).objects.get(pk=self.pk) if self.pk else None
        super(Reservation, self).save(*args, **kw)
        if old and old.datetime != self.datetime: # Field has changed
            do_something(self)

您可能还需要阅读以下内容: https : //lincolnloop.com/blog/django-anti-patterns-signals/

是的,您也可以使用post_save。 但是,您应该记住信号是同步的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM