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

Django OperationalError:registration_employeeregistration无Site_id列问题求助

解决Django Admin访问员工注册时的OperationalError(no such column)问题

这个问题我之前也碰到过,大概率是模型字段命名规范和迁移文件的遗留问题导致的,我来帮你一步步解决:

一、核心原因分析

你看到的错误OperationalError Exception Value: no such column: registration_employeeregistration.Site_id,本质是Django的数据库列命名规则和你模型里的字段名不匹配:

  • Django默认会把模型里的字段名转为小写,外键字段对应的数据库列名是小写字段名_id,比如你模型里写的Site字段,数据库里实际生成的列是site_id,但系统却在找首字母大写的Site_id,这说明迁移文件没有正确同步模型的变更。
  • 另外注意:ForeignKey字段不需要指定max_length参数,这是多余的,也可能干扰迁移的生成。

二、分步解决步骤

1. 修正模型字段的命名规范和冗余参数

打开你的员工注册模型文件,修改Site字段的命名和参数:

# 原代码
Site = models.ForeignKey(AddSite,on_delete=models.CASCADE,max_length=150,verbose_name='Site')

# 修改后
site = models.ForeignKey(AddSite,on_delete=models.CASCADE,verbose_name='Site')
  • 把字段名改成小写的site,符合Django的snake_case命名规范
  • 删除多余的max_length=150,外键不需要这个参数

2. 清理并重新生成迁移文件

如果之前的迁移文件已经出现了不一致的情况,需要先清理旧的迁移记录:

  1. 进入你的registration应用的migrations目录,删除除了__init__.py之外的所有文件
  2. 执行以下命令重新生成并应用迁移:
# 为registration应用生成新的迁移文件
python manage.py makemigrations registration
# 应用迁移到数据库
python manage.py migrate registration

如果你的数据库里还没有重要数据,也可以先回滚到初始状态再重新迁移:

# 回滚registration应用的所有迁移
python manage.py migrate registration zero
# 重新生成迁移
python manage.py makemigrations registration
# 应用迁移
python manage.py migrate registration

3. 验证修复效果

重新启动Django服务,进入Admin面板点击“员工注册”标签,应该就能正常访问了。

三、额外的优化建议(可选但推荐)

你的EmployeeRegistration模型里的Department、Category、Designation目前是CharField,建议改成ForeignKey关联到你configration应用里的对应模型,这样可以保证数据的一致性,避免手动输入错误:

# 修改后的示例代码
department = models.ForeignKey(AddDepartment,on_delete=models.CASCADE,verbose_name='Department')
category = models.ForeignKey(AddCategory,on_delete=models.CASCADE,verbose_name='Category')
designation = models.ForeignKey(AddDesignation,on_delete=models.CASCADE,verbose_name='Designation')

修改后记得重新执行makemigrations和migrate命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:32:39