【发布时间】:2018-04-13 06:23:04
【问题描述】:
假设我的服务器上有一个 django 应用程序,但我希望使用 django.contrib.auth.models 进行身份验证,其中用户和组模型/数据位于另一个数据库中的另一个服务器上。在 Django 中,我的 DATABASES 设置是这样的:
DATABASES = {
'default': {},
'auth_db': {
'NAME' : 'my_auth_db',
'ENGINE' : 'django.db.backends.mysql',
'USER' : 'someuser',
'PASSWORD' : 'somepassword',
'HOST' : 'some.host.com',
'PORT' : '3306',
},
'myapp': {
'NAME': 'myapp_db',
'ENGINE': 'django.db.backends.mysql',
'USER': 'localuser',
'PASSWORD': 'localpass',
}
}
DATABASE_ROUTERS = ['pathto.dbrouters.AuthRouter', 'pathto.dbrouters.MyAppRouter']
第一个问题:这是否可行,即它是否允许我使用存储在远程数据库“my_auth_db”中的用户登录到我的 Django 应用程序?
假设上面的答案是肯定的,如果在我的本地数据库(应用程序“myapp”)中我的模型对用户具有外键,会发生什么情况?换句话说,我的模型 SomeModel 是在 myapp 中定义的,应该存在于 myapp_db 中,但它对 my_auth_db 中的用户有一个 ForeignKey:
class SomeModel(models.model):
user = models.ForeignKey(User, unique=False, null=False)
description = models.CharField(max_length=255, null=True)
dummy = models.CharField(max_length=32, null=True)
etc.
第二个问题:这是可能的,还是根本不可能一个 DB 表拥有另一个 DB 中的表的 ForeignKey?
如果我真的想完成这项工作,我是否可以将 ForeignKey 字段 'user' 替换为 IntegerField 'user_id',然后如果我需要 somemodel.user,我会改为获取 somemodel.user_id 并使用 models.User.objects。 get(pk=somemodel.user_id),路由器知道在哪里查询用户的 auth_db?这是一种可行的方法吗?
【问题讨论】:
标签: python django django-models multiple-databases django-database