在 Django 中使用多个数据库时遇到问题。
这是场景:
我有一个 django 项目,它分为两个应用程序:app1
和app2
. App1
将负责身份验证和自定义模块(即它有自己的models.py
)并且App2
是普通的 Web 应用程序(即它有自己models.py
的模型)。
Settings.py 看起来像这样:
DATABASE_ROUTERS = ['app1.router.AuthRouter', 'app1.router.App1Router', 'app2.router.App2Router']
DATABASES = {
'default': {
[...]
},
'app2': {
[...]
}
}
如您所见,我有两个数据库(均为 PSQL 9.2),default
(用于app1
应用程序)和app2
(用于app2
应用程序),并且我定义了这样的 3 个路由器(1. 用于身份验证,2. 用于app1 model
和最后用于app2 model
.
app1.router.AuthRouter
和的代码app1.router.App1Router
如下:
class AuthRouter(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'auth':
return 'default'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'auth':
return 'default'
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'auth' or obj2._meta.app_label == 'auth':
return True
return None
def allow_syncdb(self, db, model):
if db == 'default':
return model._meta.app_label == 'auth'
elif model._meta.app_label == 'auth':
return False
return None
class App1Router(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'app1':
return 'default'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'app1':
return 'default'
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'app1' or obj2._meta.app_label == 'app1':
return True
return None
def allow_syncdb(self, db, model):
if db == 'default':
return model._meta.app_label == 'app1'
elif model._meta.app_label == 'app1':
return False
return None
问题是,当我这样做时syncdb
,它确实正确地创建auth_
了表,但它没有创建django_
表,这会出错。
[marek@t420 multipledb_test]$ python manage.py syncdb
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
[more errors coming]
django.db.utils.ProgrammingError: relation "django_content_type" does not exist
LINE 1: ..."."app_label", "django_content_type"."model" FROM "django_co...
你看?没有创建 DJANGO 表 - 不django_admin_log
,不django_content_type
,不django_session
!
有什么提示吗?这让我疯了三天!