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

为何Django migrate命令无法为指定Attendance应用创建数据库表?

问题分析与解决办法

核心问题定位

从migrate --plan的报错来看,当前Django尝试访问tenant_tenant表但该表不存在——这是因为django-tenants要求先初始化租户框架的核心表,再处理业务应用的迁移。你的Attendance应用迁移未执行,本质是租户系统的基础表还未创建,导致整个迁移流程卡住。

分步解决步骤

  1. 先初始化租户核心表
    执行租户框架的共享schema迁移,创建租户管理所需的基础表:

    python manage.py migrate_schemas --shared
    
  2. 验证核心表是否创建
    连接PostgreSQL数据库,检查tenant_tenant表是否存在:

    SELECT * FROM tenant_tenant;
    
  3. 创建初始租户(若未创建)
    django-tenants需要至少一个租户才能执行业务应用迁移,可通过Django Shell创建:

    python manage.py shell
    

    在Shell中执行(替换为你的实际租户模型配置):

    from tenant.models import Tenant
    tenant = Tenant(schema_name='public', domain_url='localhost:8000')
    tenant.save()
    
  4. 执行Attendance应用迁移
    针对指定schema执行Attendance应用的迁移:

    python manage.py migrate_schemas --schema=public attendance
    

    也可执行所有应用的迁移到指定schema:

    python manage.py migrate_schemas --schema=public
    
  5. 修复迁移文件冲突
    你的Attendance迁移文件中存在两个initial版本(0001和0006),这可能引发逻辑冲突:

    • 若0006_initial为误生成,直接删除该文件
    • 若需保留,检查两个迁移的依赖关系,确保无重复建表逻辑

额外注意事项

  • 不要直接删除django_migrations表,正确回滚迁移的方式是执行migrate appname zero,再重新执行迁移
  • 确保业务应用的模型正确继承租户相关Mixin或配置schema_name

内容的提问来源于stack exchange,提问作者Ankit Tiwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:14:50