CustomUser关于单独的数据库问题

时间:2020-01-15 15:07:57

标签: multiple-databases django-custom-user django-2.x

我想使用旧数据库中的用户,但将其他所有内容保留在“默认”数据库中。

我在atm遇到的主要问题是我无法让数据库路由器正确地将查询转发到适当的数据库。也就是说,当我运行两次迁移时,第二次出现错误

~> DJANGO_SETTINGS_MODULE=settings python manage.py makemigrations
Migrations for 'myapp':
  myapp/migrations/0001_initial.py
    - Create model CustomUser
~> DJANGO_SETTINGS_MODULE=settings python manage.py makemigrations
Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/home/manos/workspace/umed/common/oauth2_test/.env/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/home/manos/workspace/umed/common/oauth2_test/.env/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/manos/workspace/umed/common/oauth2_test/.env/lib/python3.7/site-packages/django/core/management/base.py", line 328, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/manos/workspace/umed/common/oauth2_test/.env/lib/python3.7/site-packages/django/core/management/base.py", line 369, in execute
    output = self.handle(*args, **options)
  File "/home/manos/workspace/umed/common/oauth2_test/.env/lib/python3.7/site-packages/django/core/management/base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "/home/manos/workspace/umed/common/oauth2_test/.env/lib/python3.7/site-packages/django/core/management/commands/makemigrations.py", line 101, in handle
    loader.check_consistent_history(connection)
  File "/home/manos/workspace/umed/common/oauth2_test/.env/lib/python3.7/site-packages/django/db/migrations/loader.py", line 299, in check_consistent_history
    connection.alias,
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency myapp.0001_initial on database 'auth_db'.

因此,我假设它尝试在auth_db数据库而不是default数据库中运行管理内容。但是我真的无法弄清楚我在做什么错,因为路由似乎正确。

下面的简化代码

models.py

class CustomUser(AbstractUser):
    password = models.CharField(max_length=128)
    username = models.CharField(unique=True, max_length=32)

    class Meta:
        managed = False
        db_table = 'myauthdb_user'

    objects = UserManager()

db.py

class AuthRouter:
    """ Forwards queries for users models to the auth database. """

    def db_for_read(self, model, **hints):
        if model.__name__ == 'CustomUser':
            return 'auth_db'
        return None

settings.py

DATABASE_ROUTERS = ['db.AuthRouter']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': join(BASE_DIR, 'db.app'),
    },
    'auth_db': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'localhost',
    },
}

我可以很好地使用ORM,例如CustomUser.objects.all()。但是迁移问题是一个巨大的问题。一个幼稚的解决方案是禁用管理员,但我认为根本问题仍然存在。

0 个答案:

没有答案
相关问题