python – Django多个数据库,但在单个Db中验证
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Django多个数据库,但在单个Db中验证,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3138字,纯文字阅读大概需要5分钟。
内容图文
![python – Django多个数据库,但在单个Db中验证](/upload/InfoBanner/zyjiaocheng/905/767c01db142a457c93f9249457a89d50.jpg)
所以我有一个带有几个数据库的Django项目:
default
login
foo
bar
每个应用程序都有自己的数据库(例如登录应用程序将所有模型存储在登录数据库中等).
我想在默认数据库中存储所有与Django Admin相关的模型,例如权限,用户,组.这是我的路由器的样子:
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相关的表,这是正确的.当我查看auth_permissions表时,其他应用程序缺少权限.例如:
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 – multiple databases and auth.Permission
您还可以从Django文档中阅读the limitation of multiple databases.
一些引言:
Django doesn’t currently provide any support for foreign key or many-to-many relationships spanning multiple databases.
Several contrib apps include models, and some apps depend on others. Since cross-database relationships are impossible, this creates some restrictions on how you can split these models across databases:
– each one of contenttypes.ContentType, sessions.Session and sites.Site can be stored in any database, given a suitable router.
– auth models — User, Group and Permission — are linked together and linked to ContentType, so they must be stored in the same database as ContentType.
内容总结
以上是互联网集市为您收集整理的python – Django多个数据库,但在单个Db中验证全部内容,希望文章能够帮你解决python – Django多个数据库,但在单个Db中验证所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。