2

私はドキュメントを読んでいて、2番目のデータベースを同期して準備ができています。を使用して、どのデータベースを使用する必要があるかをdjangoに指示するセクションを見つけました.using('database')

同じ考えで、次のように作成されたユーザーをどこに保存するかをdjangoに示してみました。

User.objects.using('user_data').create_user(username=username, password=password, email='')

そのコードを試してみると、次のエラーが発生しました。

AttributeError at /signup/

'QuerySet' object has no attribute 'create_user'

だから私は、デフォルトのデータベースではなく、user_dataに保存したいことをdjangoに伝える必要がある別の方法があるかどうかだけ知りたいですか?ルーターはかなり混乱しているので、使用したくないです。ありがとう。

4

2 に答える 2

4

エラーについて、複数のデータベースでのマネージャー'QuerySet' object has no attribute 'create_user'の使用のドキュメントによると:

たとえば、データベースにアクセスするカスタムマネージャメソッドであるUser.objects.create_user()があるとします。create_user()はQuerySetメソッドではなくマネージャーメソッドであるため、User.objects.using('new_users')。create_user()を実行することはできません。(create_user()メソッドは、マネージャーであるUser.objectsでのみ使用でき、マネージャーから派生したQuerySetオブジェクトでは使用できません。)

強調鉱山。これを行う必要があります:

User.objects.db_manager('new_users').create_user(username=username, password=password, email='')

また、これを試すことができます(テストされていません):

new_user = User()
new_user.username = username
new_user.password = password
new_user.email = ''
new_user.save(using='user_data')

Djangoのドキュメントで、save()用のデータベースを選択するための詳細情報。

于 2012-04-18T19:52:46.483 に答える
2

.using('database')クエリセットを返すため、この関数を使用してクエリのみを取得します。create()を使用する場合は、次のようにdb_manager()を介して使用する必要があります。

User.objects.db_manager('database').create_user(...)

詳細については、 multi-dbを参照してください。

于 2012-04-18T20:07:32.490 に答える