返回信息流强迫症不想用Django默认生成的id
这是一条镜像帖。来源:北邮人论坛 / python / #16686同步于 2016/11/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
Django 新建的model修改默认id为自定义userid报错
ywjx
2016/11/26镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 specops 的大作中提到: 】
: 也许需要manage.py migrate
我在manage.py migrate 报错
django.db.utils.OperationalError: (1091, "Can't DROP 'id'; check that column/key exists")
看报错信息好像还是默认生成的id没有替换为自定义的userid
之前有没有manage.py makemigrates
【 在 ywjx (猿未觉醒) 的大作中提到: 】
: 我在manage.py migrate 报错
: django.db.utils.OperationalError: (1091, "Can't DROP 'id'; check that column/key exists")
: 看报错信息好像还是默认生成的id没有替换为自定义的userid
【 在 specops 的大作中提到: 】
: 之前有没有manage.py makemigrates
我有manage.py makemigrates的,现在还没解决 好伤啊
【 在 Agosits 的大作中提到: 】
: 错误的意思是不是要检查一下,真的有id这个字段啊。我数据库不是很好,原来的主键能随便删吗
原来的主键是默认添加的 我想手贱自定义一个名字,结果就这样折腾了好几天了
我去复现了一下这个问题。知道原因了,但是同时发现了另一个问题,不会解决。
如果你先用了默认的id,再修改成自定义的id。
当你migrate的时候,会做两件事。
1.删掉原有的id
2.增加新的自定义id
这从migrations看出来的。
然后你第一次migrate的时候,1能够顺利进行。2应该报错了,然后这个migration没有成功apply。
然后无论你有没有新的migrations,这个migration是一定要apply之后再去apply后面的migrations的。
第二次apply这个migration的时候,再次执行第一步的时候,就报了楼主这个错了。因为id这一列早就在上次被删了,所以没有id这一列了,自然没法再删一次。
这就是问题发生的原因。
我的第2步报的错是提供的默认值不对,因为添加的是主键一定是非空的,要提供默认值,我试过0,1,2,3,‘3’。都不行。
此时我的数据库里这张表有一条记录。
django版本1.8
如果lz解决了请告诉我,谢谢。
django.db.utils.InternalError: (1067, "Invalid default value for 'cid'")
----------------
想要复现问题,你可以手动进数据库,重新添加上id这一列,这样第一步就会成功执行,报第二步的错了。
【 在 Agosits 的大作中提到: 】
: 我去复现了一下这个问题。知道原因了,但是同时发现了另一个问题,不会解决。
: 如果你先用了默认的id,再修改成自定义的id。
: 当你migrate的时候,会做两件事。
: ...................
我折腾了三天,周末也惦记着,不过还是没解决,卸载重装Django也没用,最后我只好启用最怂的大招:重装系统!!,不过我很想和你交个朋友,如果可以,我们私下交流微信?
【 在 ywjx 的大作中提到: 】
: 我折腾了三天,周末也惦记着,不过还是没解决,卸载重装Django也没用,最后我只好启用最怂的大招:重装系统!!,不过我很想和你交个朋友,如果可以,我们私下交流微信?
为什么重装系统。这是数据库的问题。最坏的办法也就是删掉数据库和所有的migrations,从0开始重新建数据库罢了。