我有一个功能,就是接收所有型号系统的信号。当我通过一个Django命令进行数据库转储填充时,我希望信号被中断,这样当通过这种方式创建模型实例时,就不会调用它。在
这是我的接收器功能:
@receiver(post_save)
def trigger_payment(sender, instance=None, created=False, **kwargs):
from TreasuryManagementApp.models import PaymentApplicationTrigger
if instance.__class__.__name__ not in trigger_models:
return
strategies = EventStrategies()
application_triggers = PaymentApplicationTrigger.objects.filter(event_name__in=trigger_models[instance.__class__.__name__]['event_names'])
for application_trigger in application_triggers:
strategies.execute(application_trigger, instance)
这是我命令的代码,我试图将功能与信号断开:
^{pr2}$问题是对Signals.disconnect()
的调用引发了以下异常:
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "/Users/hugovillalobos/Documents/Code/TaxistasProject/TaxistasVenv/lib/python3.7/site-packages/django/core/managemen
t/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/Users/hugovillalobos/Documents/Code/TaxistasProject/TaxistasVenv/lib/python3.7/site-packages/django/core/managemen
t/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/hugovillalobos/Documents/Code/TaxistasProject/TaxistasVenv/lib/python3.7/site-packages/django/core/managemen
t/base.py", line 316, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/hugovillalobos/Documents/Code/TaxistasProject/taxistas/GeneralApp/management/commands/startdatabase.py", lin
e 21, in execute
call_command('import_people')
File "/Users/hugovillalobos/Documents/Code/TaxistasProject/TaxistasVenv/lib/python3.7/site-packages/django/core/managemen
t/__init__.py", line 148, in call_command
return command.execute(*args, **defaults)
File "/Users/hugovillalobos/Documents/Code/TaxistasProject/taxistas/GeneralApp/management/commands/import_people.py", lin
e 433, in execute
Signal.disconnect(trigger_payment)
File "/Users/hugovillalobos/Documents/Code/TaxistasProject/TaxistasVenv/lib/python3.7/site-packages/django/dispatch/dispa
tcher.py", line 138, in disconnect
with self.lock:
AttributeError: 'function' object has no attribute 'lock'
使用
post_save
代替Signal
。here中的文档说明:“所有信号都django调度信号实例”,因此,您必须断开或连接实例,而不是Signal
类。在相关问题 更多 >
编程相关推荐