为什么我在 Django 中收到错误“无法解压不可迭代的 bool 对象”?

问题描述 投票:0回答:2

当我尝试从 django 中的表单获取用户输入(在本例中是一封电子邮件)时,出现错误“无法解压不可迭代的 bool 对象”。

def send_email(request):
      recepient_list=[]
      if request.method == "POST":
            
            email = request.POST['pwd_email']
            print(email)
            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", "[email protected]",recepient_list,fail_silently=False,)
                  recepient_list.clear()
python django django-views django-templates
2个回答
2
投票

我认为给您带来一些麻烦的线路是:

if User.objects.filter(email == email).exists:

我看到两个问题:

  1. 您应该使用赋值“=”而不是检查相等性“==”
  2. 我相信
    eixsts()
    是一种方法,而不是属性,因此您需要包含“()”

尝试将该行更改为:

if User.objects.filter(email=email).exists():

并查看错误是否仍然存在。


1
投票

这里有几个问题,最主要的是

.filter(email == email)
。这将检查字符串是否等于其自身,因此总是
True
,因此您使用
.filter(True)
,Django 当然不能对
bool
做太多事情。

您应该过滤:

def send_email(request):
    recepient_list = []
    if request.method == 'POST':
        email = request.POST['pwd_email']
        print(email)
        #                      ***call*** .exists() 🖟
        if User.objects.filter(email=email).exists():
            recepient_list.append(email)
            send_mail(
                'PASSWORD RESET',
                f"Your password resetkey is {random_no} \n Do not share this key with anyone",
                '[email protected]',
                recepient_list,
                fail_silently=False,
            )
            recepient_list.clear()
© www.soinside.com 2019 - 2024. All rights reserved.