3

他のいくつかのクラスによって拡張されるモデルクラス「アクション」があります。私はdjangoを初めて使用し、pre_save.connect(actionFunc、sender = Action)を呼び出すと、Actionクラスのsaveメソッドが呼び出されるたびに(派生クラスを含む)、actionFuncが呼び出されると想定しました。

私の観察では、この関数は、インスタンスがSenderで定義されたクラスタイプと直接一致する場合にのみトリガーされます。アクションのすべての派生インスタンスのシグナルを受信するためにこれを取得する方法はありますか?

4

2 に答える 2

1

いいえ、pre_save.connect何度も電話をかける必要があります。

ただし、Pythonを使用して、目的のクラスを拡張するすべてのクラスを取得し、pre_saveconnectステートメントをループすることができます。

たとえば、の拡張クラスActionがすべて特定のファイルにある場合は、次の操作を実行できます。

global_dict = globals().copy()
[el for el in global_dict.values() if getattr(el,'__base__',None)==Action]
于 2010-08-07T21:28:06.443 に答える
0

あなたができることの1つは、djangoのシグナル送信者を変更して、特定のタイプと照合する代わりに、それが行うようにすることです。

if isinstance(sender, filter):
    send_signal()

(擬似コード)

于 2010-08-11T07:39:38.593 に答える