可以改变Django信号的顺序吗?

Mat*_*lla 7 django signals django-signals

我在用户注册,socialauth_registered和post_save发送了2个信号.我希望socialauth_registered在post_save之前,因为它会影响post_save触发的函数.

这可能吗?(如果是,怎么样?!)

我不确定究竟什么是相关的,但我有:

from django.contrib.auth.models import User
from social_auth.signals import socialauth_registered, pre_update
from django.db.models.signals import post_save

<ALL OF MY MODELS>

def create_user_profile(sender, instance, created, **kwargs):
    do some stuff

def create_social_profile(sender, user, response, details, **kwargs):
    do other stuff

socialauth_registered.connect(create_social_profile, sender=None)
post_save.connect(create_user_profile, sender=User)
Run Code Online (Sandbox Code Playgroud)

Joh*_*ohn 8

我不是积极的,但我会说这是值得怀疑的.更重要的是信号背后的想法是它们应该是原子的.信号处理程序应响应信号,不应关心其他信号.依赖于两个不相关信号的顺序(显然你可以依赖于pre_save和post_save的顺序)通常是不安全的.所以,即使我对你的问题没有一个坚定的答案,我也会提出你应该仔细考虑设计的建议.

  • 感谢您的建议.我最终放弃了信号的想法,尝试了一种绝对优越的不同方法.虽然你没有明确地回答这个问题,但是你告诉我这不是一个正确的问题,这可能是我能得到的最好的答案! (4认同)

小智 8

不,您无法更改信号执行的顺序.

已提出信号优先级,但核心开发人员表示他们不会实现此功能:

https://code.djangoproject.com/ticket/16547