2010-08-07 80 views
3

我有一个模型类“Action”,它被其他几个类扩展。我是django的新手,并假设如果我调用pre_save.connect(actionFunc,sender = Action),ActionFunc随时会调用Action类中的save方法(包括任何派生类)时调用它。Can Django pre_save信号适用于所有派生类

我的观察是,只有当实例是发件人中定义的类类型的直接匹配时,才会触发此函数。无论如何要让它接收Action的所有派生实例的信号?

+1

http://stackoverflow.com/questions/5472818/working-with-djangos-post-save-signal/7202729#7202729 – Anentropic 2011-08-26 11:22:45

回答

1

不,您必须拨打pre_save.connect许多次。

但是,您可以使用python获取扩展感兴趣的类的所有类,并循环pre_save connect语句。

说,如果Action的扩展类都在一个给定的文件,你可以做到以下几点:

global_dict = globals().copy() 
[el for el in global_dict.values() if getattr(el,'__base__',None)==Action] 
+0

而不是多次连接,您可以连接一次而不指定发件人,并在接收器功能中检查发件人issubclass() – Anentropic 2011-08-26 11:22:32

0

一件事你可以做的是修改信号发送器在Django,这样,而不是匹配针对特定类型代替它确实

if isinstance(sender, filter): 
    send_signal() 

(伪码)