Маршрутизация доступа к пользовательской модели пользователя через маршрутизатор базы данных в 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
Вернуться на верх