Disconnect signals for models and reconnect in django

后端 未结 5 1015
心在旅途
心在旅途 2020-12-08 14:11

I need make a save with a model but i need disconnect some receivers of the signals before save it.

I mean,

I have a model:

class MyModel(mo         


        
5条回答
  •  悲&欢浪女
    2020-12-08 14:35

    I needed to prevent certain signals from firing during unittests so I made a decorator based on qris's response:

    from django.db.models import signals
    
    def prevent_signal(signal_name, signal_fn, sender):
        def wrap(fn):
            def wrapped_fn(*args, **kwargs):
                signal = getattr(signals, signal_name)
                signal.disconnect(signal_fn, sender)
                fn(*args, **kwargs)
                signal.connect(signal_fn, sender)
            return wrapped_fn
        return wrap
    

    Using it is simple:

    @prevent_signal('post_save', my_signal, SenderClass)
    def test_something_without_signal(self):
        # the signal will not fire inside this test
    

提交回复
热议问题