V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shiziwen
V2EX  ›  Django

是不是只有 django 自带的 signal(例如 post_save),接收者才能制定 sender 为特定 model?

  •  
  •   shiziwen · 2015-07-14 00:37:15 +08:00 · 3148 次点击
    这是一个创建于 3214 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是不是只有django自带的signal(例如post_save),接收者才能制定sender为特定model?

    例如如下代码:

    @receiver(pre_save, sender=MyModel)
    def my_handler(sender, **kwargs):
    ...

    在使用自定义的signal并指定sender时,没有效果:

    from django.dispatch import receiver
    from django.dispatch import Signal
    
    ss=Signal()
    
    @receiver(ss, sender=MyUser)
    def signal_test6(sender, **kwargs):
        print '6'
    
    ss.send(sender =a)
    

    结果为空[],signal_test6并没有被调用。

    当不指定sender时,

    >>> @receiver(ss)
    ... def signal_test7(sender, **kwargs):
    ...     print '77'
    ...
    >>> ss.send(sender =a)
    77
    [(<function signal_test7 at 0x24ae7d0>, None)]
    

    signal_test7调用成功。

    请问这是怎么回事?

    多谢。

    2 条回复    2015-07-27 14:47:30 +08:00
    yueyoum
        1
    yueyoum  
       2015-07-14 18:37:14 +08:00
    你的 ss.send(sender=a) 这个a是什么?

    你改成 sender=MyUser 试试?
    shiziwen
        2
    shiziwen  
    OP
       2015-07-27 14:47:30 +08:00
    @yueyoum
    ss.send(sender=a),这里的a指的是MyUser的一个实例。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1384 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:06 · PVG 01:06 · LAX 10:06 · JFK 13:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.