You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行migrate_schemas时出现users_user表不存在的Django多租户错误

问题分析与修复方案

错误根源

执行python manage.py migrate_schemas --shared时出现django.db.utils.ProgrammingError: relation "users_user" does not exist,核心原因是:

  • 全局配置的AUTH_USER_MODEL = 'users.User'指向自定义用户模型,但users应用仅被加入TENANT_APPS,未在SHARED_APPS中。
  • 迁移共享schema(public)时,SHARED_APPS里的django.contrib.admin依赖用户模型表,但此时shared schema中不存在users_user表,导致迁移失败。

修复方案

根据业务需求选择以下两种方案之一:

方案一:将用户模型放到共享schema(适合全局管理用户场景)

此方案下所有用户数据存储在shared schema,每个用户关联对应的租户,便于全局管理超级管理员等角色。

  1. 修改settings.py,将users应用加入SHARED_APPS:
SHARED_APPS = [
    'django_tenants',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'crispy_forms',
    'crispy_bootstrap5',
    'django_htmx',
    'django_celery_beat',
    'core',
    'tenants',
    'users',  # 添加此行
]
  1. 重置并重新生成用户应用的迁移文件:
  • 删除users/migrations/目录下所有旧迁移文件(保留__init__.py)
  • 执行命令生成新迁移:
python manage.py makemigrations users
  1. 重新执行共享schema迁移:
python manage.py migrate_schemas --shared

方案二:将admin应用移到租户schema(适合租户完全隔离场景)

此方案下每个租户的schema独立包含admin和用户模型,shared schema不包含admin,适合需要严格租户数据隔离的场景。

  1. 修改settings.py,将django.contrib.admin从SHARED_APPS移到TENANT_APPS:
SHARED_APPS = [
    'django_tenants',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'crispy_forms',
    'crispy_bootstrap5',
    'django_htmx',
    'django_celery_beat',
    'core',
    'tenants',
    # 移除'django.contrib.admin'
]

TENANT_APPS = [
    'django.contrib.admin',  # 添加此行
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users',
    'accreditation',
    'documents',
    'checklists',
    'notifications',
    'reports',
    'audit',
]
  1. 执行共享schema迁移:
python manage.py migrate_schemas --shared
  1. 创建租户后,执行租户schema迁移:
python manage.py migrate_schemas

附加警告处理

对于静态文件目录不存在的警告,直接创建对应目录即可:

mkdir D:\workik_projects\AccrediDoc_V3\static

内容的提问来源于stack exchange,提问作者Dr BRIJESH PATEL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:40:54