pre_save信号方法在模型的保存方法之后被调用

问题描述 投票:1回答:1

我正在使用pre_save信号执行某些功能,但是当我使用print语句打印日志时,我发现我的Model的save方法在pre_save绑定方法之前被调用,据我所知,应该在之前调用pre_save方法,我正在发布我的代码部分以供参考:

Models.py:

class RedeemCode(models.Model):
    code = models.CharField(max_length=128)
    reward = models.ForeignKey(Reward, on_delete=models.CASCADE)
    is_active = models.BooleanField(default = True)

    class Meta:
        unique_together = ['code']

    def save(self, **kwargs):
        print("In model save method")
        super().save(**kwargs)

在Views.py中我的pre_save方法:

@receiver(pre_save,sender=RedeemCode)
def send_noti(sender, instance, **kwargs):
    print("Pre_save Method called ----->",instance)

[当我从管理面板添加新值并提交时,该模型的保存方法称为“首先打印In model save method,然后调用pre_save绑定方法,因此输出如下:

In model save method
Pre_save Method called

据我所知,不应先调用pre_save绑定方法,然后再保存Model的方法,并且输出应如下所示:

Pre_save Method called
In model save method

我不知道发生了什么,任何人都可以解释为什么发生这种情况,或者如果我做错了什么,请提前谢谢:)

python django django-models django-views django-signals
1个回答
1
投票
我找出原因,发生这种情况的原因是,pre_save绑定方法在super().save()方法之前被调用,显然信号绑定了模型的save方法,而不是我们覆盖的那个,因此它们在执行之前或之后执行模型的默认保存方法是使用super()调用的,因此如果我注释super().save()不调用pre_savepost_save方法。
© www.soinside.com 2019 - 2024. All rights reserved.