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

Django连接MongoDB使用内置密码重置功能触发无信息DatabaseError

问题根源

你遇到的报错是djongo 1.3.6版本和Django 3.2内置PasswordResetView的默认查询语法不兼容导致的:

  • 内置PasswordResetView查询用户时默认使用email__iexact(大小写不敏感匹配),生成的SQL用到了iLIKE语法,djongo 1.3.6转译该语法为MongoDB查询时出现参数解析错误,导致数据库报错。
  • 你看到的模板VariableDoesNotExist报错是数据库查询失败后的附带异常,不是问题根源。

解决方案

方案1(推荐,无版本依赖):自定义密码重置视图,替换查询逻辑

重写PasswordResetView的get_users方法,将默认的大小写不敏感查询替换为djongo支持的查询逻辑:

  1. 在你的app视图文件中添加自定义视图:
from django.contrib.auth.views import PasswordResetView
from django.contrib.auth import get_user_model

User = get_user_model()

class CustomPasswordResetView(PasswordResetView):
    def get_users(self, email):
        # 替换默认的iexact查询,规避djongo语法适配问题
        active_users = User._default_manager.filter(**{
            'email__exact': email,
            'is_active': True,
        })
        return (u for u in active_users if u.has_usable_password())

如果业务需要支持邮箱大小写不敏感匹配,可以把查询条件改为email__icontains=email,djongo对icontains的适配比iexact更稳定。
2. 修改urls.py中的路由配置,替换默认视图:

path('pw_reset/', CustomPasswordResetView.as_view(), name="reset_password"),

方案2:更换djongo版本

djongo 1.3.6版本存在多个ORM查询转译bug,你可以尝试更换版本解决适配问题:

# 升级到最新稳定版
pip install --upgrade djongo

# 或者降级到适配更稳定的1.3.4版本
pip install djongo==1.3.4

修改完成后重启服务,再次测试密码重置功能即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:45:03