Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在型号'之后调用的预保存信号方法;s保存方法_Python_Django_Django Models_Django Views_Django Signals - Fatal编程技术网

Python 在型号'之后调用的预保存信号方法;s保存方法

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,

我使用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, 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
方法