如何解决执行makemigrations时出现的django.db.utils.ProgrammingError错误
问题根源
错误的核心原因是在模块加载阶段执行了数据库查询:你的create_area_api/views.py里,在api_create_area类定义中直接写了print(queryset.get()),这行代码会在Django启动(包括执行makemigrations命令)时就执行,而此时accounts_project表还未通过迁移创建,导致数据库找不到对应表。
解决方案
移除类定义中的直接数据库查询代码
把print(queryset.get())从类的顶层代码中移除,放到视图的方法里(比如list、retrieve等动作方法),这样只有当实际请求到来时才会执行查询,而不是模块加载时:class api_create_area(viewsets.ModelViewSet): queryset = YourModel.objects.all() serializer_class = YourSerializer def list(self, request, *args, **kwargs): # 把查询逻辑放到方法内 print(self.queryset.get()) return super().list(request, *args, **kwargs)重新执行迁移命令
代码修改完成后,依次执行:python3 manage.py makemigrations python3 manage.py migrate清理迁移文件(可选,仅当仍有问题时)
如果修改代码后还是报错,执行以下步骤重置迁移:- 删除所有app下
migrations目录里除__init__.py之外的所有文件 - 清空开发环境数据库(数据不重要的前提下)
- 重新执行
makemigrations和migrate命令
- 删除所有app下
内容的提问来源于stack exchange,提问作者Mihir Shah
相关产品推荐
相关产品推荐

