Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django在不同数据库中共享用户会导致500和403错误 目标_Python_Django_Postgresql_Doccano - Fatal编程技术网

Python Django在不同数据库中共享用户会导致500和403错误 目标

Python Django在不同数据库中共享用户会导致500和403错误 目标,python,django,postgresql,doccano,Python,Django,Postgresql,Doccano,我希望Doccano使用我的主应用程序(app2)中保存的用户作为自己的用户,而不是Doccano使用自己的用户。这两个都是Django数据库,所以我假设这些不是Doccano特有的问题 问题 用户之间的连接工作正常,我可以用app2用户登录Doccano。 在/projects页面中,网站上出现500内部服务器错误,终端app2打印:错误:关系“api\u project”在字符363处不存在 创建新项目时,在发布到/v1/projects 我所做的 我目前正在其容器中运行Doccano后端、

我希望Doccano使用我的主应用程序(app2)中保存的用户作为自己的用户,而不是Doccano使用自己的用户。这两个都是Django数据库,所以我假设这些不是Doccano特有的问题

问题 用户之间的连接工作正常,我可以用app2用户登录Doccano。 在/projects页面中,网站上出现
500内部服务器错误
,终端app2打印:
错误:关系“api\u project”在字符363处不存在

创建新项目时,在发布到
/v1/projects

我所做的 我目前正在其容器中运行Doccano后端、nginx和postgres,并在容器中运行app2和
postgres\u app2
。Doccano后端与Doccano postgres共享一个(docker compose)网络,与
postgres_app2
共享另一个网络。
doccano/app/app/settings.py
既有数据库又有到路由器的链接:

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': path.join(BASE_DIR, 'db.sqlite3'),
    },
    "app2_db": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "postgres",
        "USER": os.getenv("POSTGRES_USER", "user_app2"),
        "PASSWORD": os.getenv("POSTGRES_PASSWORD", "pass_app2"),
        "HOST": "postgres",
        "PORT": 5432,
    }
}

DATABASE_ROUTERS = ['app.authRouter.AuthRouter']
使用
AuthRouter.py
如下所示:

# AuthRouter.py

class AuthRouter(object):
    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'auth' or model._meta.app_label == 'authtoken':
            return 'app2_db'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'auth' or model._meta.app_label == 'authtoken':
            return 'app2_db'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if obj1._meta.app_label == 'auth' or obj1._meta.app_label == 'authtoken' or \
           obj2._meta.app_label == 'auth' or obj2._meta.app_label == 'authtoken':
           return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label == 'auth' or app_label == 'authtoken':
            return db == 'app2_db'
        return None