Сортировать приемники сигнала Джанго - PullRequest
0 голосов
/ 29 августа 2018

Django вызывает методы-приемники по-своему. Есть ли способ сортировки приемников сигнала Джанго? Я не нашел ничего связанного с этим в официальной документации Django.

1 Ответ

0 голосов
/ 29 августа 2018

Если я не ошибаюсь, нет никаких причин иметь более одного приемника для одинаковых 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...