You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Django与MongoDB Atlas连接?执行makemigrations遇报错

Django连接MongoDB Atlas执行makemigrations报错:NotImplementedError(Database对象不能用布尔判断)

环境版本

django==4.0
Python==3.10.12
djongo==1.3.6
pymongo==4.7.3

数据库配置(settings.py)

DATABASES = {
        'default': {
            'ENGINE': 'djongo',
            'NAME': 'syscandb',
            'ENFORCE_SCHEMA': False,
            'CLIENT': {
                'host': 'mongodb+srv://<user>:<senha>@clusterak.mp9ylv1.mongodb.net/syscandb?retryWrites=true&w=majority'
            }  
        }
}

报错信息

(venv) rkart@rkart-B-ON:/home/jobs/micakes/syscan$ python3 manage.py makemigrations
    No changes detected
    Traceback (most recent call last):
      File "/home/jobs/micakes/syscan/manage.py", line 24, in <module>
        main()
      File "/home/jobs/micakes/syscan/manage.py", line 20, in main
        execute_from_command_line(sys.argv)
      File "/home/jobs/micakes/syscan/venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 425, in execute_from_command_line
        utility.execute()
      File "/home/jobs/micakes/syscan/venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/home/jobs/micakes/syscan/venv/lib/python3.10/site-packages/django/core/management/base.py", line 386, in run_from_argv
        connections.close_all()
      File "/home/jobs/micakes/syscan/venv/lib/python3.10/site-packages/django/db/utils.py", line 213, in close_all
        connection.close()
      File "/home/jobs/micakes/syscan/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 25, in inner
        return func(*args, **kwargs)
      File "/home/jobs/micakes/syscan/venv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 305, in close
        self._close()
      File "/home/jobs/micakes/syscan/venv/lib/python3.10/site-packages/djongo/base.py", line 208, in _close
        if self.connection:
      File "/home/jobs/micakes/syscan/venv/lib/python3.10/site-packages/pymongo/database.py", line 1342, in __bool__
        raise NotImplementedError(
    NotImplementedError: Database objects do not implement truth value testing or bool(). Please compare with None instead: database is not None

问题原因

djongo 1.3.6版本的djongo/base.py文件中,_close方法使用了if self.connection:的布尔判断逻辑,但pymongo 4.x及以上版本已修改Database对象实现,禁止直接做布尔判断,必须通过is not None来比较,两者版本不兼容导致报错。

解决方案

方案1:降级pymongo到兼容版本

卸载当前高版本pymongo,安装djongo 1.3.6支持的3.x系列版本:

pip uninstall pymongo
pip install pymongo==3.12.3

方案2:修改djongo源代码修复判断逻辑

找到虚拟环境中djongo/base.py文件(路径示例:venv/lib/python3.10/site-packages/djongo/base.py),定位到_close方法,将布尔判断改为None比较:
原代码:

def _close(self):
    if self.connection:
        self.connection.client.close()

修改为:

def _close(self):
    if self.connection is not None:
        self.connection.client.close()

额外配置优化(可选)

结合你测试成功的连接串,可在数据库配置的CLIENT中添加authSource参数,确保权限验证正常:

DATABASES = {
        'default': {
            'ENGINE': 'djongo',
            'NAME': 'syscandb',
            'ENFORCE_SCHEMA': False,
            'CLIENT': {
                'host': 'mongodb+srv://<user>:<senha>@clusterak.mp9ylv1.mongodb.net/syscandb?retryWrites=true&w=majority',
                'authSource': 'admin'
            }  
        }
}

内容的提问来源于stack exchange,提问作者SrKartcheski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:36:07