9

ユーザー登録時に socialauth_registered と post_save という 2 つのシグナルが送信されています。post_save がトリガーする関数に影響するため、socialauth_registered を 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)
4

4 に答える 4

15

いいえ、シグナルが実行される順序を変更することはできません。

シグナルの優先度が提案されましたが、コア開発者はこの機能を実装しないと述べています:

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

于 2014-03-30T15:10:30.247 に答える
10

私は肯定的ではありませんが、疑わしいと思います。もっと重要なのは、シグナルの背後にある考え方は、シグナルはアトミックであるべきだということです。シグナルハンドラーはシグナルに応答する必要があり、他のシグナルを気にする必要はありません。2 つの無関係なシグナルの順序に依存すること (たとえば、pre_save と post_save の順序に依存できることは明らかです) は、一般的に安全ではありません。ですから、あなたの質問に対して確固たる答えはありませんが、デザインについて慎重に考える必要があるというアドバイスを提供します.

于 2012-04-04T19:11:27.317 に答える
0

create_social_profile と create_user_profile を呼び出す 1 つのシグナルの使用を検討しましたか。おそらく、このシグナルを post_save に添付できますか?

于 2012-04-04T19:14:51.100 に答える