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

Django执行makemigration报错:表arenadatabase.providers_skill_name不存在

问题描述

我的Django项目中models.py代码如下:

class Car(models.Model):
    brand = models.CharField(max_length=50 , null=True , blank=True)
    model = models.CharField(max_length=50 , null=True , blank=True)
    code = models.CharField(max_length=20 , unique=True)


class Label(models.Model):
    COLORS = (
        ('blue' , 'blue'),
        ('red' , 'red'),
        ('light_green' , 'light_green'),
        ('black' , 'black'),
        ('white' , 'white'),
        ('orange' , 'orange'),
        ('purple' , 'purple'),
    )
    name = models.CharField(max_length=20)
    color = models.CharField(max_length=30 , choices=COLORS)
    

class Skill_Name(models.Model):
    label = models.ForeignKey(Label , on_delete=models.CASCADE , null=True , blank=True)
    name = models.CharField(max_length=50)
    have_different_cars = models.BooleanField(default=True)


class Skill(models.Model):
    car = models.ForeignKey(Car , on_delete=models.CASCADE, null=True , blank=True)
    skill = models.ForeignKey(Skill_Name , on_delete=models.CASCADE , null=True , blank=True)


class Provider(models.Model):
    user = models.OneToOneField(User , on_delete=models.CASCADE , related_name="user_provider")
    name = models.CharField(max_length=100)
    skills = models.ManyToManyField(Skill , blank=True)

执行makemigrations命令时,触发错误:

django.db.utils.ProgrammingError: (1146, "Table 'arenadatabase.providers_skill_name' doesn't exist")

尝试删除迁移文件后重新执行迁移,问题仍未解决。

解决步骤

1. 清理数据库残留异常表

  • 登录数据库终端(以MySQL为例,执行mysql -u 用户名 -p)
  • 切换到项目数据库:use arenadatabase;
  • 查看所有表:show tables;
  • 若发现providers_skill_name或其他不属于当前模型的异常表,执行删除:drop table providers_skill_name;

2. 彻底重置迁移记录

  • 删除项目所有migrations目录下的__pycache__文件夹,以及除__init__.py之外的所有迁移文件
  • 回到数据库终端,删除django_migrations表中对应app的迁移记录:
    DELETE FROM django_migrations WHERE app = '你的应用名称';
    

3. 分阶段生成迁移(规避依赖冲突)

由于模型间存在外键关联,分批次创建迁移可避免顺序问题:

  1. 先注释掉Skill_Name、Skill、Provider中的外键/多对多关联字段,仅保留基础字段,执行:
    python manage.py makemigrations
    python manage.py migrate
    
  2. 恢复Skill_Name中的外键字段,执行迁移:
    python manage.py makemigrations
    python manage.py migrate
    
  3. 依次恢复Skill、Provider的关联字段,每次恢复后执行makemigrations和migrate命令

4. 确认应用配置

检查settings.py的INSTALLED_APPS中是否包含模型所属的应用,若指定应用迁移,可执行:

python manage.py makemigrations 你的应用名称
python manage.py migrate 你的应用名称

内容的提问来源于stack exchange,提问作者Alireza javanpour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:11:16