尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

django外键字段会自动在数据库字段后面加上_id

django外键字段会自动在数据库字段后面加上_id
📅 发布时间:2026/7/20 16:14:05

这个错误:

(1054, "Unknown column 'wms_inventory_check_task.plan_id' in 'where clause'")

表示:

Django 查询wms_inventory_check_task表时,SQL 使用了plan_id字段,但是你的 MySQL 表中不存在plan_id这个列。


1. 产生原因

你的 Django Model:

plan=models.ForeignKey(InventoryCheckPlan,on_delete=models.CASCADE,related_name='tasks',)

Django 会默认生成数据库字段:

plan_idBIGINT

所以 ORM 查询:

InventoryCheckTask.objects.filter(plan_id=1)

实际 SQL:

SELECT*FROMwms_inventory_check_taskWHEREplan_id=1;

但是你的数据库表:

SHOWCOLUMNSFROMwms_inventory_check_task;

可能没有:

plan_id

2. 检查数据库表

执行:

DESCwms_inventory_check_task;

正常应该看到:

+--------------+------------+ | Field | Type | +--------------+------------+ | id | bigint | | plan_id | bigint | | location_id | int | | assignee_id | bigint | | status | smallint | +--------------+------------+

如果没有plan_id,就是数据库和 Model 不一致。


3. 解决方式一(推荐):执行 migration

查看 migration:

python manage.py makemigrations

然后:

python manage.py migrate

Django 会创建:

ALTERTABLEwms_inventory_check_taskADDCOLUMNplan_idBIGINTNOTNULL;

4. 解决方式二:数据库已经手动创建

如果你之前是手写 SQL 创建表:

例如:

CREATETABLEwms_inventory_check_task(idBIGINT,planBIGINT);

错误。

应该是:

plan_idBIGINTNOTNULL

因为 Django ForeignKey:

plan=models.ForeignKey(...)

数据库字段不是:

plan

而是:

plan_id

5. 如果字段实际叫 plan

比如你的表:

CREATETABLEwms_inventory_check_task(idBIGINT,planBIGINT)

可以告诉 Django:

plan=models.ForeignKey(InventoryCheckPlan,db_column='plan',on_delete=models.CASCADE)

这样 Django 查询:

WHEREplan=1

而不是:

WHEREplan_id=1

但是一般不推荐,因为 Django 规范就是:

xxx_id

6. 如果 migration 状态混乱

查看:

python manage.py showmigrations

例如:

[X] 0001_initial [X] 0002_add_task

显示已经执行,但是数据库没有字段。

说明:

migration 记录存在,但是数据库结构不一致。

可以:

开发环境

python manage.py migrate app_name zero python manage.py migrate

生产环境

不要回滚,手动补字段:

ALTERTABLEwms_inventory_check_taskADDCOLUMNplan_idBIGINTNOTNULL;

然后补外键:

ALTERTABLEwms_inventory_check_taskADDCONSTRAINTfk_task_planFOREIGNKEY(plan_id)REFERENCESwms_inventory_check_plan(id);

结合你前面的 Model

你的表应该至少包含:

id plan_id location_id assignee_idstatus

现在错误说明:

plan_id 缺失

所以第一步直接执行:

DESCwms_inventory_check_task;

看一下字段。

大概率是你之前手动建表时把:

plan_id

写成了:

plan

或者漏掉了。

相关新闻

  • 完整实战:知识感知聊天机器人
  • 为什么p5play是初学者学习游戏开发的完美选择?5大优势解析
  • WVP-GB28181-Pro:解决传统视频监控碎片化问题的全栈国标平台技术方案

最新新闻

  • html介绍
  • Unlock Music Electron:三分钟解密加密音乐,让音乐真正属于你
  • 哔咔漫画下载器完整指南:三步打造个人离线漫画库
  • 苏州黄金回收避坑技巧,称重计价全程透明 - 奢侈品回收评测
  • Lenovo Legion Toolkit终极指南:拯救者笔记本硬件控制的完整解决方案
  • SDRAM控制器实战:解析命令饥饿、竞态条件与低功耗管理

日新闻

  • Python开发内部工具:7大核心库实战解析
  • 合肥雷达官方2026年7月最新信息:客户服务网点地址与售后热线权威公示 - 亨得利官方服务中心
  • PCA实战指南:从变量纠缠诊断到主成分业务解读

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号