Django pre_save信号可以用于所有派生类

时间:2010-08-07 18:52:48

标签: django django-signals

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

我的观察是,当实例是Sender中定义的Class类型的直接匹配时,才会触发此函数。反正是否有这个来接收所有派生的Action实例的信号?

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

你可以做的一件事就是修改django中的信号发送者,这样就可以代替特定类型进行匹配而不是

if isinstance(sender, filter):
    send_signal()

(伪代码)