【发布时间】:2019-11-14 20:38:05
【问题描述】:
我的 settings.py
中定义了两个数据库和路由器 'default': {
},
'primary': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': ...
},
'auth': {
// similar to primary
}
DATABASE_ROUTERS = ['app.database_router.AuthRouter','app.database_router.PrimaryReplicaRouter']
我遇到了 Django 无法识别 主数据库 中的表/关系的问题。我尝试重新排序 AuthRouter 和 PrimaryRouter,但 Django 无法识别 auth 数据库 中的用户关系。有什么建议么?我尝试将其中一个设为默认值,但这也不能解决问题。
这是我的路由器,具有类似的 Auth 类:
class PrimaryReplicaRouter:
def db_for_read(self, model, **hints):
"""
Reads go to a read replica. We can add 'read_replica', 'write_replica'
"""
return 'primary'
def db_for_write(self, model, **hints):
"""
Writes always go to primary.
"""
return 'primary'
def allow_relation(self, obj1, obj2, **hints):
"""
Relations between objects are allowed if both objects are
in the primary/replica pool.
"""
return True
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
All non-auth models end up in this pool.
"""
return True
class Auth:
def db_for_read(self, model, **hints):
return 'auth'
def db_for_write(self, model, **hints):
return 'auth'
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the auth app is involved.
"""
return True
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Make sure the auth app only appears in the 'auth'
database.
"""
return True
【问题讨论】:
标签: python django database postgresql