7

django では、User の作成は、通常の Model インスタンスの作成とは異なる独自の流れを持っています。create_user()のメソッドであるを呼び出す必要がありBaseUserManagerます。

django REST フレームワークのフローは do restore_object()and thenであるため、ハッキングせずに、一般的な create API エンドポイントで をsave_object()使用して単純にユーザーを作成することはできません。ModelSerializer

これを解決するためのクリーンな方法は何でしょうか? または、少なくともdjangoの組み込みパイプを使用して動作させますか?

編集:

特に機能していないのは、それを使用して作成されたユーザー インスタンスを認証しようとするとdjango.contrib.auth.authenticate、インスタンスが単にUser.objects.create()and notを使用して作成された場合に失敗すること.create_user()です。

4

4 に答える 4

0

私はDRFで働いています。そして、これが私がユーザーを作成する方法です:

save メソッドをオーバーライドしたシリアライザーがあります。

def save(self, **kwargs ):
    try:
        user = create_new_user(self.init_data)
    except UserDataValidationError as e:
        raise FormValidationFailed(e.form)
    self.object = user.user_profile
    return self.object

create_new_user は、ユーザー作成のための私の関数であり、ビューには次のものがあります。

def post(self, request, *args, **kwargs):
    return self.create(request, *args, **kwargs)
于 2013-11-05T09:48:10.430 に答える
0

restore_object()ではなく、シリアライザーでオーバーライドする必要があるようですsave()。これにより、オブジェクトを正しく作成できます。

ただし、フレームワークを悪用しようとしているようですcreate()。1 つのオブジェクトで 2 つのオブジェクト (ユーザーとプロファイル) を作成しようとしています。私は DRF の専門家ではありませんが、これが問題を引き起こす可能性があると思います。

カスタム ユーザー モデル (同じオブジェクトにプロファイルも含まれます) を使用することで、おそらくより適切に実行できます。

于 2013-11-06T15:10:28.717 に答える