1 错误复盘
1.1 场景复现
插入纯数字的教师学号成功,删除纯数字的教师学号成功。
插入带英文的教师学号成功,删除带英文的教师学号失败。
我的数据库里面有下面这条数据,教师工号,插入成功,但是删除失败。
报错:(1292, “Truncated incorrect DOUBLE value: ‘L16846’”)
显示我的值是DOUBLE。但是我检查models.py 和数据库的表单,类型是CharField和varchar。查询的时候,把id当做tea_id?
1.2 原因:修改models.py后,migrate操作的问题
1、有没有注意到models.py里面把tea_id设为了主键,但是数据库里的主键是id,而不是tea_id。
2、最开始我没有把tea_id设为主键,所以这个表单默认使用id作为主键。
3、后面我在models.py里面把tea_id设为主键(也更改了其他几个表单),重新migrate的时候,出现了报错,然后我在后端代码app/migrations里面,把0001_initial.py以及之后的migrate记录都删掉了。
4、但是数据库migrate的缓存还在。如果把下面的几个文件删了,还是会报错。
2、解决方案
2.1 解决方案1
如果网站没有上线,可以先备份数据库的数据,删除所有表单,再重新migrate,再导入数据。
我用的是此方案,因为我也不知道还有多少models配置没有同步成功。
重新migrate之后我的teacher表单变成下面的样子:
和之前相比,1、没有id,2、tea_id变成了主键。
再次插入英文教师号和删除英文教师号,成功!
2.2 解决方案2
你可以试试把后端的数据库的tea_id改成主键,并把id的主键去掉,改成如上图的样子。
只要定义的models表单和数据库一样就行。