当前位置: 首页 > news >正文

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

这个错误:

(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

或者漏掉了。

http://www.jsqmd.com/news/1229061/

相关文章:

  • 3步掌握SpringBlade:从单体到微服务的平滑迁移终极指南
  • 2026年新疆昆仑雪菊怎么选?5家实测对比以及避坑推荐 - 中国远见品牌企业资讯
  • Checkra1n Windows版越狱工具使用指南与A12设备支持解析
  • 厦门黄金回收门店实地测评|2026本地权威科普,协会理事单位变现指南 - 商业每日快报
  • 数据科学家SQL面试核心:指标建模、留存计算与业务逻辑拆解
  • Windows Server + SQL Server 内网靶场安全演练全流程
  • django-parler缓存机制深度剖析:如何高效管理翻译数据的存储与读取
  • 终极指南:利用DL-based-Intelligent-Diagnosis-Benchmark实现轴承故障诊断
  • PyTorch NLP实战:nlp-pytorch-zh中的文本生成技术
  • 【AI数字人短视频制作黄金公式】:20年实战总结的7步量产法,90%创作者还不知道的降本增效密钥
  • 完整实战:知识感知聊天机器人
  • 扣子 Bot 灰度发布失败率下降 91.7% 的秘密:基于真实 A/B 数据的渐进式流量调度模型(含 YAML 配置模板)
  • 为什么p5play是初学者学习游戏开发的完美选择?5大优势解析
  • 【JAVA毕设源码分享】基于springboot电动车租赁平台系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • TerraTorch:基于PyTorch Lightning的地理空间基础模型微调企业级解决方案
  • 【小程序课程设计/毕业设计】研究生日常答疑与信息推送管理平台 轻量化考研学习咨询服务小程序设计 院校研究生招生资讯查询小程序实现【附源码、数据库、万字文档】
  • 如何优化NLP模型性能:nlp-pytorch-zh中的7个实用技巧 [特殊字符]
  • 2026双检时代必看|告别查重/AIGC二选一翻车!Paperxie实现论文双向合规(全程免费)
  • MOSFET雪崩效应与UIS测试技术解析
  • WVP-GB28181-Pro:解决传统视频监控碎片化问题的全栈国标平台技术方案
  • 2026十大听书软件排行榜,王者竟然是它?
  • TonWeb核心功能全解析:钱包、NFT与Jetton合约开发实战
  • 高级技巧:使用Google Ads Python库进行批量广告操作
  • Nacos架构解析与服务治理最佳实践
  • Claude Code 启动报 `因为在此系统上禁止运行脚本。有关详细信息,请参阅`
  • 2026重庆涉税争议问题处理服务机构排行一览 - 互联网科技品牌测评
  • 5分钟在Windows上安装Android子系统:WSABuilds终极指南
  • ZjDroid深度解析:基于Xposed框架的Android动态逆向分析工具实战指南
  • TON区块链开发终极工具:TonWeb JavaScript SDK全面入门指南
  • 英雄联盟免费换肤神器:R3nzSkin国服特供版终极指南