如何在非默认数据库中创建用户?

时间:2012-04-18 18:36:07

标签: python database django

我正在阅读文档并让我的第二个数据库同步并准备好了。我找到了关于通过使用.using('database')告诉django应该使用哪个数据库的部分。

在同样的想法中,我试图向django展示一旦用户创建它就应该保存用户:

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

当我尝试了那段代码时,我收到了这个错误:

AttributeError at /signup/

'QuerySet' object has no attribute 'create_user'

所以我只是好奇是否有不同的方式我必须告诉django我希望它保存在user_data而不是默认数据库?我不想使用路由器,因为我觉得它们很混乱。感谢。

2 个答案:

答案 0 :(得分:3)

关于错误'QuerySet' object has no attribute 'create_user',根据Using managers with multiple databases的文档:

  

例如,假设您有一个触及的自定义管理器方法   database - 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文档中Selecting a database for save()的更多信息。

答案 1 :(得分:0)

.using('database')返回一个查询集,因此您只能使用此函数来获取查询。如果使用create(),则必须通过db_manager()使用它,如下所示:

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

请查看:multi-db以获取更多信息。