Маршрутизация доступа к пользовательской модели пользователя через маршрутизатор базы данных в django
Рассмотрим следующую ситуацию:
У вас есть несколько приложений на python/django, которые используют общую базу данных пользователей. Вы реализовали пользовательскую модель пользователя в отдельном django-приложении под названием 'benutzer', которое импортируется в каталог проекта каждого приложения.
Теперь простой маршрутизации доступа к пользовательской модели пользователя с помощью пользовательского маршрутизатора базы данных, очевидно, недостаточно.
Вероятно, вы получите ошибки, аналогичные следующей:
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration benutzer.0001_initial is applied before its dependency auth.0012_alter_user_first_name_max_length on database 'benutzer_extern'.
Какие модели/имена приложений, обрабатываемые внутри django, необходимо дополнительно маршрутизировать в пользовательскую модель пользователя? Добавление app_label 'auth' в определение маршрутизатора не работает.
class ExternUsermodelRouter:
"""
A router to control all database operations on models in an
extern user application.
"""
app_benutzerverwaltung = {'benutzer', 'auth'}
def db_for_read(self, model, **hints):
"""
Attempts to read benutzer models go to db_benutzer.
"""
if model._meta.app_label in self.app_benutzerverwaltung:
return 'db_benutzer'
return None
def db_for_read(self, model, **hints):
"""
Attempts to write benutzer models go to db_benutzer.
"""
if model._meta.app_label in self.app_benutzerverwaltung:
return 'db_benutzer'
return None
def allow_relation(self, obj1, obj2, **hints):
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Make sure the benutzer apps only appear in the
'db_benutzer' database.
"""
if app_label in self.app_benutzerverwaltung:
return db == 'db_benutzer'
return None