修改django数据库时提示重命名表主键, Did you rename house.houseid to house.id (a BigAutoField)? [y/N] n
一,问题描述
在django中models.py文件里新增一个order表,通过“py manage.py makemigrations”命令做迁移时,发现小黑框出现让我重命名数据库里已经存在的表的id,提示添加一个非空‘id’到一个早已存在的house表是不允许的;具体提示如下:
二,解决问题
尝试了如下解决方法:
1,注释掉models.py中新增的order表的代码重新执行“py manage.py makemigrations”,发现仍然提示上述错误。
2,stackoverflow里有人碰到过类似情况(具体链接点此处),回复的解决方案如下:
This might sound dumb but did you perhaps run a find and replace in your project where you replaced id with pid? Django automatically generates primary key fields with the name
id
notpid
. This or perhaps previously you ran a modified version of Django which generated fields namedpid
instead ofid
is what I can think happened. As below comment states just edit your migration files and correct them.大意是说这问题挺离谱的,有可能在在models里自定义的主键是id,但是在代码里用的是pid,才产生这问题;
经过排查代码发现,有个带参接口用的是“houseid”,而非models.py中自定义的主键“id”,把“houseid”换成“id”后,运行“py manage.py makemigrations”发现无报错了。
1 views.py 2 3 def addToHouseOrder(request, houseid): 4 """ 5 用户加入房子到订单列表 6 :param request: 7 :param id: houseid 8 :return: 9 """ 10 if request.method == "GET": 11 currentUser = request.session['username'] 12 print(currentUser, houseid) 13 houseResult = House.objects.filter(id=houseid) 14 return HttpResponse(houseid) 15 elif request.method == "POST": 16 pass