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'