Django中获取表单邮箱输入时出现“cannot unpack non-iterable bool object”错误的原因及解决方法
Django中获取表单邮箱输入时出现“cannot unpack non-iterable bool object”错误的原因及解决方法
嗨,我看了你的代码,这个错误其实是因为你踩了两个小坑,咱们一步步来解决:
问题1:Filter查询条件的写法错误
你现在写的User.objects.filter(email == email)是个布尔表达式,结果永远是True,相当于让Django返回所有用户,这不仅不是你想要的效果,还会让Django在解析查询条件时出错。正确的做法是用关键字参数指定查询字段,这样才能精准筛选出邮箱匹配的用户:
User.objects.filter(email=email)
问题2:Exists方法没调用
你写的.exists只是引用了方法本身,并没有执行查询,所以这里拿到的是方法对象而非布尔值。必须加上括号调用.exists(),这样才会触发数据库查询并返回True/False:
if User.objects.filter(email=email).exists():
修正后的完整代码
(注意还要确保random_no变量已经提前定义好哦)
def send_email(request): recepient_list = [] if request.method == "POST": email = request.POST['pwd_email'] print(email) # 修正查询条件和exists调用 if User.objects.filter(email=email).exists(): recepient_list.append(email) send_mail( "PASSWORD RESET", f"Your password reset key is {random_no} \n Do not share this key with anyone", "eliaakjtrnq@gmail.com", recepient_list, fail_silently=False, ) recepient_list.clear()
简单解释下错误原因:当你把email == email这个布尔值传给filter时,Django无法正确解析这个非标准的查询参数,尝试解包它的时候就抛出了“cannot unpack non-iterable bool object”的错误。修正上述两处后,这个问题就彻底解决啦。
备注:内容来源于stack exchange,提问作者Man of Light
相关产品推荐
相关产品推荐

