Django公司断开信号引发“function”对象没有属性“lock”

2024-09-26 22:50:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个功能,就是接收所有型号系统的信号。当我通过一个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'

Tags: infrompyexecuteliblinecodeusers
1条回答
网友
1楼 · 发布于 2024-09-26 22:50:18

使用post_save代替Signalhere中的文档说明:“所有信号都django调度信号实例”,因此,您必须断开或连接实例,而不是Signal类。在

from django.db.models.signals import post_save

class Command(BaseCommand):
    help = _("""Run this command to import partners and operators from plane files""")

    def execute(self, *args, **kwargs):
        from TreasuryManagementApp.controllers import trigger_payment

        post_save.disconnect(trigger_payment)
        self.import_partners()
        self.import_operators()
        self.import_dead_ones()
        post_save.connect(trigger_payment)  # don't forget to reconnect

相关问题 更多 >

    热门问题