Django Decorator Заказать сигналы - PullRequest
0 голосов
/ 16 октября 2019

Я читал учебник по сигнализации в django и наткнулся на пример

@receiver(post_save, sender=User)
  def create_user_profile(sender, instance, created, **kwargs):
    if created:
      Profile.objects.create(user=instance)


@receiver(post_save, sender=User)
  def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

Как мы выбираем порядок или операции?

Как мы знаем, что create_user_profile исполняется до save_user_profile?

Если порядок определяется объявлением, разве это не немного опасно, когда код автоматически объединяется через git, svn или что-то еще?

1 Ответ

0 голосов
/ 16 октября 2019

Я не уверен, что это возможно. Основные разработчики говорят:

Иногда очень важно вызывать один сигнал раньше всех других или вызывать сигналы в очереди. В настоящее время при подключении сигналов они выполняются в порядке подключения;но это не тривиально, чтобы гарантировать порядок выполнения метода подключения. Предложенное решение состоит в том, чтобы добавить аргумент порядка для сигнала подключения, поэтому при необходимости вы можете указать правильное упорядочение, но все остальные коды по-прежнему совместимы.

В некоторых случаях вы можете использовать pre_save и * 1008. * и я все еще не уверен, что это лучшая идея

...