我正在研究模型Mixin
,该模型需要基于一个属性动态设置信号。
比较复杂,但是为了简单起见,假设Mixin具有此属性:
models = ['app.model1','app.model2']
此属性在model
中定义,该属性扩展了此混合。
如何动态注册信号?
我试图创建类方法:
@classmethod
def set_signals(cls):
def status_sig(sender, instance, created, *args, **kwargs):
print('SIGNAL')
... do som things
for m in cls.get_target_models():
post_save.connect(status_sig,m)
我的想法是在类中的某个地方自动调用此方法(例如__call__
方法),但现在,我只是尝试先调用它,然后再save
调用模型以查看它是否有效,但没有成功。 >
from django.db.models.signals import post_save print(post_save.receivers) Realestate.set_signals() print(post_save.receivers) r = Realestate.objects.first() r.status = 1 r.save()
输出
[] [((139967044372680, 46800232), <weakref at 0x7f4c9d702408; dead>), ((139967044372680, 46793464), <weakref at 0x7f4c9d702408; dead>)]
因此,您看到它注册了那些模型,但在保存房地产后未触发任何信号。
您知道如何使其正常工作吗?甚至不必显式调用方法就更好了?
编辑:
我不能只将信号创建放在mixin
文件中,因为模型取决于子模型中的字符串。
我正在研究一个Mixin模型,该模型需要根据一个属性动态设置信号。它更复杂,但是为了简单起见,假设Mixin具有以下属性:models = ['app.model1','...
如果尚未解决此问题: