1

我有多个 Django 项目。每个人都有自己安装的应用程序。他们没有安装相同的应用程序。

它们之间的共同点是它们应该使用和共享相同的自定义用户模型和数据库。

哪种方法是正确的?

谢谢!

4

1 回答 1

0

这是一个非常棘手的问题,除非您将您的项目中的一个指定为自定义用户模型的“主人”。否则,您可能会针对同一个数据库表进行竞争迁移。一旦您决定哪个项目将成为主项目,非主项目应该有一个单独的条目DATABASES,将它们连接到中央用户数据库


DATABASES = {
    'default': ...
    'users': {
        'HOST': 'central-host.example.com',
        'NAME': 'central-users',
        ... 
    }
}
DATABASE_ROUTERS = 'my_app.database_router'

在您的路由器中,您可以指定应从中央用户数据库中读取用户模型:


class Router(object):
    def db_for_read(self, model, **hints):
        if model.__name__ == 'CustomUserModel':
            return 'users'
        return 'default'

    def db_for_write(self, model, **hints):
        if model.__name__ == 'CustomUserModel':
            return 'users'
        return 'default'

于 2018-12-12T18:53:30.263 回答