【问题标题】:Getting MultiValueDictKeyError while checking if a field is empty检查字段是否为空时获取 MultiValueDictKeyError
【发布时间】:2022-01-11 22:15:36
【问题描述】:

我有一个用户选择计划的注册表单。我正在尝试检查该字段是否为空,是否应显示一条消息。字段名称为plan。代码如下

if password1==password2:
            if CustomUser.objects.filter(email=email).exists():
                messages.info(request, 'User with same email already exists')
                return redirect('register')
            
            elif plan is None:
                messages.info(request, 'Please select a plan')
                return redirect('register') 
            else:
                user=CustomUser.objects.create_user(full_name=full_name.upper(),age=age, phone_no=phone_no, address=address, plan=plan, email=email.lower(), password=password1)
                user.is_active = False
                user.save()
                
                usr_otp = random.randint(100000, 999999)
                UserOtp.objects.create(user = user, otp = usr_otp)
                mess =  f"Hello, {user.full_name},\n Please enter the otp to validate your email and activate your account. \nYour OTP is {usr_otp} .\n Thanks!"
                
                return render(request, 'register.html', {'otp': True, 'user': user})
                # return redirect('login')

我尝试了多种方法来检查计划字段是否为空,例如

elif 计划 == ' '

没有计划

elif 计划是无

elif request.POST['plan'] == ' '

对于所有这些,我只得到一个错误

MultiValueDictKeyError at /account/register
'plan'
Request Method: POST
Request URL:    http://127.0.0.1:8000/account/register
Django Version: 3.2.8
Exception Type: MultiValueDictKeyError
Exception Value:    
'plan'
Exception Location: C:\Users\rickb\Envs\virenv\lib\site-packages\django\utils\datastructures.py, line 78, in __getitem__
Python Executable:  C:\Users\rickb\Envs\virenv\Scripts\python.exe
Python Version: 3.9.7
Python Path:    
['C:\\Users\\rickb\\Envs\\virenv\\jgs',
 'C:\\Users\\rickb\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip',
 'C:\\Users\\rickb\\AppData\\Local\\Programs\\Python\\Python39\\DLLs',
 'C:\\Users\\rickb\\AppData\\Local\\Programs\\Python\\Python39\\lib',
 'C:\\Users\\rickb\\AppData\\Local\\Programs\\Python\\Python39',
 'C:\\Users\\rickb\\Envs\\virenv',
 'C:\\Users\\rickb\\Envs\\virenv\\lib\\site-packages']
Server time:    Mon, 06 Dec 2021 23:30:33 +0530

我不明白为什么会这样,请纠正我做错了什么以及如何检查 plan 字段是否为空。

html中的plan字段是一个传递值的单选按钮

【问题讨论】:

  • 您尝试过打印计划吗?也许计划变量有问题。

标签: python django django-views


【解决方案1】:

试试这个:

elif request.POST.get('plan') == ' '

如果没有条目,python 方括号会给出错误,而 get 函数返回 None..

【讨论】:

  • 哦,很抱歉,我没有注意到答案来自两个不同的人。
  • 感谢您阐明为什么我应该使用 .get()
  • 因为get函数返回None如果plan不存在而[]返回MultiDictError
  • 好的,谢谢,我现在很清楚这个概念了
【解决方案2】:

如果计划字段为空,则键 'plan' 将不存在于 request.POST 中。因此,要验证此字段是否为空,您可以这样做

elif request.POST.get('plan') is None:

因为如果计划字段为空,get 将返回 None

【讨论】:

  • 谢谢你解释了不同之处,从现在开始我将使用 POST.get() 来使用输入。
猜你喜欢
  • 1970-01-01
  • 2012-02-21
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多