实际上,我在当前项目中遇到了同样的问题。正如您一样,我有一个完全独立的应用程序,它使用另一个数据库,并且我可以拥有其他可能具有相同行为的应用程序。
我所做的是创建一个目录应用程序来存储我的应用程序,然后将其添加到我的 settings.py 文件的末尾:
DATABASE_ROUTERS = ['myproject.routers.MultiDBRouter']
import os
APPS_DIR = os.path.join(PROJECT_ROOT, 'apps')
for app_name in os.listdir(APPS_DIR):
print '\nLooking for settings in apps/%s :' % app_name
if os.path.exists(os.path.join(APPS_DIR, app_name, 'settings.py')):
print ' Settings file found...'
app = __import__('%s.settings' % app_name)
content = dir(app.settings)
if 'DATABASES' in content:
print ' Adding databases :'
for key, value in app.settings.DATABASES.iteritems():
if DATABASES.has_key(key):
print ' Can not add %s database config, because it already exists' % key
else:
DATABASES[key] = value
DATABASES[key]['APPS'] = [app_name]
print ' Added %s database config' % key
它会自动查看所有 apps/myapp/ 目录中的 settings.py 文件。如果它在 app/myapp/settings.py 文件中找到一个新的 DATABASES 变量,它会将其他数据库配置添加到您的 DATABASES 变量(真正的那个)。
我还创建了一个不必使用 using 命令(MultiDBRouter)的路由器。
然后我在所有需要另一个数据库的应用程序中添加一个 settings.py 文件:
DATABASES = {
'db': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database',
'USER': 'username',
'PASSWORD': 'mysecretpassword',
}
}