Python 在型号'之后调用的预保存信号方法;s保存方法
我使用pre_save signal来执行一些功能,但是当我使用print语句来打印日志时,我发现我的模型的save方法在pre_save bound方法之前被调用,根据我所知道的pre_save方法之前应该被调用,我发布了我的部分代码以供参考: Models.py:Python 在型号'之后调用的预保存信号方法;s保存方法,python,django,django-models,django-views,django-signals,Python,Django,Django Models,Django Views,Django Signals,我使用pre_save signal来执行一些功能,但是当我使用print语句来打印日志时,我发现我的模型的save方法在pre_save bound方法之前被调用,根据我所知道的pre_save方法之前应该被调用,我发布了我的部分代码以供参考: Models.py: class RedeemCode(models.Model): code = models.CharField(max_length=128) reward = models.ForeignKey(Reward,
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)
in Views.py
我的预存方法:
@receiver(pre_save,sender=RedeemCode)
def send_noti(sender, instance, **kwargs):
print("Pre_save Method called ----->",instance)
当我从管理面板添加新值并提交时,首先调用模型的保存方法,然后在模型保存方法中打印,然后调用pre_save bound方法,因此输出如下:
In model save method
Pre_save Method called
根据我的理解,不应该先调用pre_save bound方法,然后再调用Model的save方法,输出应该是这样的:
Pre_save Method called
In model save method
我不明白发生了什么,谁能解释一下为什么会发生这种情况,或者如果我做错了什么,提前谢谢:)我找到了原因,之所以会发生这种情况,是因为在super().save()
方法之前调用了pre_save-bound方法,显然是用模型的save方法绑定的信号,与我们重写的方法不同,因此它们在使用super()
调用模型的默认保存方法之前或之后执行,因此如果我注释super().save()
未调用pre\u save
或post\u save
方法