我用以下方法测试了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)
在manage.py shell中运行以上代码: 然后我运行我的网站,看到models.save()成功工作,但是回调函数没有运行。
或者,我在shell上再次运行上述代码,然后在shell中运行models.save()。”save“再次运行良好,但回调函数仍然没有发生任何变化。
最后,我将上述代码嵌入到一个__init__.py
文件中,然后在网站上运行save()函数。不过,什么也没发生。
你能帮我弄清楚为什么预存信号似乎不起作用吗?
埃里克的回答之所以有效,是因为他让你在model s.py中连接信号,这样当你通过网站保存模型时,信号处理程序与信号触发程序处于相同的过程中。
在例1和例3中,很容易看出它们为什么不起作用-您正在保存一个不同的过程(网站)到您的信号接收器正在收听。
我希望我能更好地理解为什么示例2也坏了,但我只是在自己的项目中调试了一个类似的问题,同时在shell中测试信号,这肯定与信号发送方和接收方无法“看到”对方有关。
logging.debug()
正在使用根记录器,默认情况下,该处理程序级别为30(“WARNING”)。=>;
logging.debug('something')
只是根本不做任何事情(调试级别是10<;30)。见http://docs.python.org/2/library/logging.html应使用另一个自定义记录器执行相同的测试,或执行以下操作:
最初的问题没有包含足够的信息,无法知道它是否是OP面临的真正问题(或部分问题)。
但操作系统的代码肯定不能与我的
./manage.py shell
一起工作您没有为一个设置发件人类。
其次,如果您使用的是Django 1.3,那么应该使用新的decorator语法。
应该可以,但我还没有测试过代码,所以如果它仍然坏了,请告诉我。
相关问题 更多 >
编程相关推荐