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'

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

4

2 回答 2

4

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

例如,假设您有一个接触数据库的自定义管理器方法——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(...)

看看:多数据库以获取更多信息。

于 2012-04-18T20:07:32.490 回答