Если я не ошибаюсь, нет никаких причин иметь более одного приемника для одинаковых signal
и sender
. Это возможно , но я не верю, что это правильный подход, и вы не будете иметь явного контроля над вызывающей последовательностью каждого из них.
Если, например, у вас есть набор дублирующих сигналов (которые делают разные вещи), например, так:
from django.db.models import signals
from django.dispatch import receiver
from django.contrib.auth import get_user_model
User = get_user_model()
@receiver(signals.pre_save, sender=User)
def signal_receiver_1(*args, **kwargs):
pass
@receiver(signals.pre_save, sender=User)
def signal_receiver_2(*args, **kwargs):
pass
@receiver(signals.pre_save, sender=User)
def signal_receiver_3(*args, **kwargs):
pass
Это бы сработало, но порядок выполнения явно не известен. Однако вы можете переписать его примерно так, чтобы явно указать порядок выполнения:
from django.db.models import signals
from django.dispatch import receiver
from django.contrib.auth import get_user_model
User = get_user_model()
def signal_receiver_1(*args, **kwargs):
pass
def signal_receiver_2(*args, **kwargs):
pass
def signal_receiver_3(*args, **kwargs):
pass
@receiver(signals.pre_save, sender=User):
def pre_save_signal_receiver_master(*args, **kwargs):
signal_receiver_1(*args, **kwargs)
signal_receiver_2(*args, **kwargs)
signal_receiver_3(*args, **kwargs)