2012-04-18 151 views
0

我正在阅读文档并让我的第二个数据库同步并准备就绪。我找到了关于通过使用.using('database')来告诉django它应该使用哪个数据库的部分。如何在非默认数据库中创建用户?

基于同样的思路我试图表明Django的,它应该保存用户一旦像THI创建:

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而不是默认数据库?我宁愿不使用路由器,因为我发现它们相当混乱。谢谢。

回答

3

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

For example, say you have a custom manager method that touches the database -- User.objects.create_user(). Because create_user() is a manager method, not a QuerySet method, you can't do User.objects.using('new_users').create_user(). (The create_user() method is only available on User.objects, the manager, not on QuerySet objects derived from the manager.)

重点煤矿。你需要这样做:

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

此外,你可以试试这个(没有测试):为Selecting a database for save() Django的文档中

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

更多信息。

+0

那么我将如何去使用Authincate()?或登录()?或注销()我也猜。我尝试了文档中的三种方法,但都没有提供所需的结果。使用:'user = authenticate(username = username,password = password,using ='user_data')'不会返回错误,但它也不会产生所需的效果 – city 2012-04-18 21:58:22

0

.using('database')返回一个查询集,所以你使用这个函数只能得到一个查询。在使用create()的情况下,必须通过db_manager()像这样使用它:

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

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

相关问题