Django лучший способ поделиться одной моделью пользователя и базой данных между несколькими проектами

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

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

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

Спасибо!

1 ответ

Это очень сложная проблема, если вы не определите один из своих проектов как "мастер" пользовательской пользовательской модели. В противном случае вы могли бы иметь конкурирующие миграции для одной и той же таблицы базы данных. Как только вы решите, какой проект будет основным, проекты, не являющиеся основными, должны иметь отдельную запись в DATABASES который соединит их с центральной базой данных пользователей


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

В вашем маршрутизаторе вы можете указать, что модель User должна считываться из базы данных центральных пользователей:


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'

Другие вопросы по тегам