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

Django外键报错:appbjjtournament_competitors.Group_id列不存在

问题分析与解决方案

问题概述

在Django项目中,创建Group1和Competitors模型实现参赛者分组管理,其中Competitors包含指向Group1的外键字段Group。访问后台管理页面/admin/appbjjtournament/competitors/时,出现OperationalError: no such column: appbjjtournament_competitors.Group_id错误,执行删除迁移、makemigrations和migrate操作后问题仍未解决。

代码问题排查

首先修复models.py中的语法错误:
Group1类的point字段定义缺少括号,这会导致迁移文件生成异常,无法正确创建表结构:

# 错误写法
point = models.IntegerField
# 正确写法
point = models.IntegerField()

彻底重置迁移与数据库表的步骤

  1. 停止当前运行的Django开发服务器
  2. 进入appbjjtournament应用的migrations目录,删除除__init__.py之外的所有迁移文件
  3. 连接项目数据库,执行以下操作:
    • 删除django_migrations表中所有app字段值为appbjjtournament的记录
    • 删除数据库中的appbjjtournament_group1和appbjjtournament_competitors两张表
  4. 重新生成迁移文件:
    python manage.py makemigrations appbjjtournament
    
  5. 应用迁移到数据库:
    python manage.py migrate appbjjtournament
    

额外优化建议

Django模型字段名推荐使用小写字母开头,避免与内置类名冲突或产生大小写相关问题,建议将Competitors中的外键字段名改为小写:

class Competitors(models.Model):
    flname = models.CharField(max_length=255)
    Weight = models.IntegerField(validators=[MinValueValidator(50), MaxValueValidator(300)])
    rank = models.CharField(max_length=255)
    group = models.ForeignKey(Group1, blank=True, null=True, on_delete=models.CASCADE)

内容的提问来源于stack exchange,提问作者Bastian Hieu Le-Ngoc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:02:10