运行Django makemigration提示Database对象未实现布尔值检测如何解决
报错产生原因
该错误由Djongo与高版本PyMongo的兼容性问题导致:
- PyMongo 4.0及以上版本取消了Database对象的布尔值判断逻辑,不允许直接对Database实例做
if 实例这类隐式布尔校验,要求必须显式通过实例 is not None判断是否存在。 - 当前使用的Djongo稳定版源码中,关闭数据库连接的逻辑仍使用
if self.connection的隐式判断,触发PyMongo的拦截逻辑就会抛出该错误。
解决办法
方案1:降级PyMongo到适配版本(最稳妥)
目前Djongo稳定版适配的最高PyMongo版本为3.12.3,执行以下命令降级即可:pip install pymongo==3.12.3
降级完成后重新运行makemigrations、migrate命令即可正常执行。
方案2:手动修改Djongo源码(适合需要使用高版本PyMongo的场景)
手动修改Djongo的源码兼容高版本PyMongo即可,步骤如下:
- 找到Python环境下的Djongo安装路径,打开
site-packages/djongo/base.py文件 - 定位到代码第208行的
if self.connection:语句 - 将其修改为
if self.connection is not None:
修改后保存文件,重新执行Django数据库相关命令即可正常运行。
你当前的settings.py中数据库配置适配本地无密码启动的MongoDB,无需额外调整,版本兼容性问题修复后即可正常连接。
内容的提问来源于stack exchange,提问作者Aman Jain
相关产品推荐
相关产品推荐

