Python Django多个数据库,但在单个数据库中进行身份验证
因此,我有一个Django项目,其中包含两个数据库:Python Django多个数据库,但在单个数据库中进行身份验证,python,django,Python,Django,因此,我有一个Django项目,其中包含两个数据库: default login foo bar 每个应用程序都有自己的数据库(例如,登录应用程序将在登录数据库中存储所有模型等) 我想在默认数据库中存储所有Django管理相关模型,如权限、用户、组。这就是我的路由器的外观: class DBRouter(object): default_db_apps = ( 'auth', 'admin', 'contenttypes',
default
login
foo
bar
每个应用程序都有自己的数据库(例如,登录应用程序将在登录数据库中存储所有模型等)
我想在默认数据库中存储所有Django管理相关模型,如权限、用户、组。这就是我的路由器的外观:
class DBRouter(object):
default_db_apps = (
'auth',
'admin',
'contenttypes',
'sessions',
)
def db_for_read(self, model, **hints):
if model._meta.app_label in self.default_db_apps:
return 'default'
return model._meta.app_label
def db_for_write(self, model, **hints):
if model._meta.app_label in self.default_db_apps:
return 'default'
return model._meta.app_label
def allow_relation(self, obj1, obj2, **hints):
return True
def allow_syncdb(self, db, model):
if model._meta.app_label in self.default_db_apps:
return db == 'default'
return False
当我跑步时:
python manage.py syncdb --noinput
它在默认数据库中创建所有正确的与身份验证相关的表。但当我查看auth_权限表时,其他应用程序的权限缺失。例如:
defaultdb=# select * from auth_permission;
id | name | content_type_id | codename
----+-------------------------+-----------------+--------------------
1 | Can add log entry | 1 | add_logentry
2 | Can change log entry | 1 | change_logentry
3 | Can delete log entry | 1 | delete_logentry
4 | Can add permission | 2 | add_permission
5 | Can change permission | 2 | change_permission
6 | Can delete permission | 2 | delete_permission
7 | Can add group | 3 | add_group
8 | Can change group | 3 | change_group
9 | Can delete group | 3 | delete_group
10 | Can add user | 4 | add_user
11 | Can change user | 4 | change_user
12 | Can delete user | 4 | delete_user
13 | Can add content type | 5 | add_contenttype
14 | Can change content type | 5 | change_contenttype
15 | Can delete content type | 5 | delete_contenttype
16 | Can add session | 6 | add_session
17 | Can change session | 6 | change_session
18 | Can delete session | 6 | delete_session
(18 rows)
我希望所有模型(甚至不同数据库中的模型)的权限都存储在默认应用程序中
有什么解决方案吗?问题是权限使用外键(如果我记得很清楚的话,带有ContentTypes的通用外键),并且不支持两个数据库之间的外键 看到这个帖子了吗 您还可以阅读Django文档 几句话: Django目前不支持外键或跨多个数据库的多对多关系 一些contrib应用程序包括模型,一些应用程序依赖于其他应用程序。由于不可能存在跨数据库关系,因此对如何跨数据库拆分这些模型产生了一些限制:
-ContentType.ContentType、sessions.Session和sites.Site中的每一个都可以存储在任何数据库中,只要有合适的路由器。
-身份验证模型(用户、组和权限)链接在一起并链接到ContentType,因此它们必须与ContentType存储在同一数据库中