私はカスタムpost_save信号を配線しています.kwargのセットを渡す簡単な方法が見つからないようです。 (カスタムフォーム内)自体を保存kwargsをsaveからpost_saveに渡す方法
def save(self, commit=True):
user = super(CustomFormThing, self).save(commit=False)
#set some other attrs on user here ...
if commit:
user.save()
return user
中に
その後、私のカスタムpost_saveフックの内側に、私は次のことを持っている(ただし、任意のkwargsからを取得することはありません)
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
some_id = kwargs.get('some', None)
other_id = kwargs.get('other', None)
if created:
#do something with the kwargs above...
がどのように私はkwargsからを渡すかもしれませんpost_saveイベントへの保存から?
のように私は(Djangoのユーザー自体から分離された)ユーザー・プロファイルに住んで、他の引数(非ユーザー属性)を渡すに興味があります。ポスト・セービングは、これを達成するための素晴らしい場所のように思えました...私は外部変数を得ることはできません。私はあなたの提案を試み、それがうまくいくとポストバックします(post_save信号そのものの** kwargsを利用したいのですが) –
私はここでシグナルは良い考えではないと思います。シグナルは、オブジェクトがコードの異なる部分で作成されている場合(アプリ外でも可能)に適しています。しかし、あなたのケースでは、オブジェクトがフォームの外で作成されていれば、シグナルは役に立たなくなります。だから私は最も合理的な方法は、フォームの保存で直接 'User'とプロファイルを作成することだと思います。実装が簡単で、後でコードを理解しやすい。 – DrTyrsa
私は、ほとんどの人(大丈夫、たぶん私:)は、PostProcess()ではなく、オーバーライドされたsave()メソッドでUserProfileの作成と操作を行うと信じています。しかし、あなたの要件は異なるかもしれません。いずれにしても、プロファイルがすでに作成されていて、それが役立つ場合は、post_saveで 'instance.get_profile()'を呼び出すこともできます。 – alan