0

私は github で django-custom-user アプリを使用しています: https://github.com/recreatic/django-custom-user

定義された信号があります:

@receiver(post_save, sender=EmailUser)
def user_saved(sender=None, **kwargs):
    print("Request finished!")
    user = kwargs["instance"]
    if kwargs["created"]:
        blah = Blah(user=get_user_model(), name="None")
        blah.save()

現在、次のエラーが表示されます: "" を割り当てられません: "Blah.user" は "EmailUser" インスタンスである必要があります。github の説明では、特定のメール アドレスを取得するように指示されているため、このエラーは理にかなっています。

user = get_user_model().get(email="user@example.com")

私の質問は...この場合、作成されたばかりのユーザーを取得するにはどうすればよいですか? ログインしたばかりのユーザーのメールアドレスを持っているわけではありませんか? 私はdjango admin btwを通してこれをやっています。これはビュー内と同義で、request.user を使用できます。でも、今ここでそれをすることはできないと思います。

誰かがシグナルのこれらのコールバックにある引数を説明できますか? このコールバック関数には任意の名前の user_saved が付いていますが、何らかの理由で引数 "sender" と "kwargs" を取得します。それらはどこから来て、これらのコールバックの引数のリストはどこにありますか?

4

1 に答える 1

1

それ以外の:

blah = Blah(user=get_user_model(), name="None")

使用するだけです:

blah = Blah(user=kwargs["instance"], name="None")

これBlah()は、クラス モデルではなく、インスタンスを期待しているためです。

シグナル レシーバーは常に最初の引数を持ち、次にシグナルのドキュメントで説明されているようにsender、いくつかの可変引数を持ちます (これが が必要な理由です) 。引数のリストは、保存後のドキュメントにあります。*kwargspost-save

于 2013-11-02T20:07:05.880 に答える