Django лучший способ поделиться одной моделью пользователя и базой данных между несколькими проектами - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть несколько проектов Django.У каждого свои приложения.На них не установлены одни и те же приложения.

Общим для всех них является то, что им следует использовать и использовать одну и ту же модель и базу данных настраиваемого пользователя.

Какой правильный способвыполнить это?

Спасибо!

1 Ответ

0 голосов
/ 12 декабря 2018

Это очень сложная проблема, если вы не определите один из своих проектов как «мастер» пользовательской пользовательской модели.В противном случае вы могли бы иметь конкурирующие миграции для одной и той же таблицы базы данных.Как только вы решите, какой проект будет основным, проекты, не являющиеся главными, должны иметь отдельную запись в 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'

...