Wei*_* An 10 python django django-signals
我通过以下方式测试了Django的"pre_save"信号,但无法捕获其中任何一个的信号.
$
from django.db.models.signals import pre_save
import logging
def my_callback(sender, **kwargs):
logging.debug("======================================")
pre_save.connect(my_callback)
Run Code Online (Sandbox Code Playgroud)
在manage.py shell中运行上面的代码:然后我运行我的网站并看到models.save()成功运行,但回调函数没有运行.
或者,我再次在shell上运行上面的代码,然后在shell中运行models.save()."save"再次运行良好,但回调函数仍未发生任何变化.
最后,我将上面的代码嵌入到一个__init__.py文件中,然后在网站上运行save()函数.但事实并非如此.
你能不能帮我弄清楚为什么pre_save信号看起来不起作用?
Eri*_*arr 10
您没有为一个设置发件人类.
from django.db.models.signals import pre_save
from myapp.models import MyModel
import logging
def my_callback(sender, **kwargs):
logging.debug("======================================")
pre_save.connect(my_callback, sender=MyModel)
Run Code Online (Sandbox Code Playgroud)
其次,如果您使用的是Django 1.3,则应使用新的装饰器语法.
# Inside your models.py
from django.db import models
from django.db.models.signals import pre_save
from django.dispatch import receiver
class MyModel(models.Model):
field1 = models.TextField()
field2 = models.IntegerField()
@receiver(pre_save, sender=MyModel)
def mymodel_save_handler(sender, **kwargs):
logging.debug("======================================")
Run Code Online (Sandbox Code Playgroud)
应该这样做,但我还没有测试过代码,所以请告诉我它是否仍然存在问题.