簡體   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