python - 如何将数据库路由器添加到 Django 项目
问题描述
我正在按照主题/db/multi-db中有关如何在一个 Django 项目中处理多个数据库的说明进行操作
我已经创建了所需的两个路由器。它们保存为 ./database_routers/discourse.py 和 ./database_routers/wordpress.py
./database_routers/discourse.py 的内容是
class DiscourseRouter:
"""
A router to control all database operations on models in the
discourse application.
"""
def db_for_read(self, model, **hints):
"""
Attempts to read discourse models go to discourse.
"""
if model._meta.app_label == 'discourse':
return 'discourse'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write discourse models go to discourse.
"""
if model._meta.app_label == 'discourse':
return 'discourse'
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the discourse app is involved.
"""
if obj1._meta.app_label == 'discourse' or \
obj2._meta.app_label == 'discourse':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Make sure the discourse app only appears in the 'discourse'
database.
"""
if app_label == 'discourse':
return db == 'discourse'
return None
./database_routers/wordpress.py 的内容是
class WordpressRouter:
"""
A router to control all database operations on models in the
wordpress application.
"""
def db_for_read(self, model, **hints):
"""
Attempts to read wordpress models go to wordpress.
"""
if model._meta.app_label == 'wordpress':
return 'wordpress'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write wordpress models go to wordpress.
"""
if model._meta.app_label == 'wordpress':
return 'wordpress'
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the wordpress app is involved.
"""
if obj1._meta.app_label == 'wordpress' or \
obj2._meta.app_label == 'wordpress':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Make sure the wordpress app only appears in the 'wordpress'
database.
"""
if app_label == 'wordpress':
return db == 'wordpress'
return None
我创建了一个空./database_routers/__init__.py
文件
我设置的 api/settings 中的数据库路由器设置
DATABASE_ROUTERS = ['database_routers.DiscourseRouter', 'database_routers.WordpressRouter']
当我尝试使用 shell 来查看项目时,我
./manage.py shell_plus
我明白了
ImportError: Module "database_routers" does not define a "DiscourseRouter" attribute/class
如何将数据库路由器添加到 Django 项目中,以便 python 识别路径 directory_name.ClassName?
解决方案
您错过了模块名称。
DATABASE_ROUTERS = [
'database_routers.discourse.DiscourseRouter',
'database_routers.wordpress.WordpressRouter'
]
推荐阅读
- hibernate - 休眠关系(一对多、多对多、一对一)
- javascript - useCapture eventListener 对 mozilla 和 chrome 或任何旧浏览器的行为如何
- c# - 将类型 'Tile' 转换为 'Tile[]'
- java - springdoc-openapi 不同的例子
- ios - 收到来自 Firebase 的推送通知 ios 但没有声音或在通知中心
- java - 百里香叶。如何根据布尔参数隐藏元素?
- python-3.x - 无法从 Python3 导入 tkSnack
- r - 如何在 R 中保存与输入 tiff 尺寸完全相同的 tiff 背景图像
- oracle-apex - 在 oracle apex 中使用 JavaScript 创建页面以编辑 PDF?
- matlab - 如何修改matlab中的子图?