检查字段是否为空时获取 MultiValueDictKeyError
Getting MultiValueDictKeyError while checking if a field is empty
我有一个用户选择计划的注册表单。我正在尝试检查该字段是否为空,是否应显示一条消息。字段名称是 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 计划是 None
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 字段是否为空。
plan中的字段html是单选按钮,传递一个值
试试这个:
elif request.POST.get('plan') == ' '
在 python 中,如果没有条目,方括号会给出错误,而 get 函数 returns None..
如果计划字段为空,则键 'plan'
将不存在于 request.POST
中。所以要验证这个字段是否为空,你可以这样做
elif request.POST.get('plan') is None:
因为如果计划字段为空,get
将 return None
。
我有一个用户选择计划的注册表单。我正在尝试检查该字段是否为空,是否应显示一条消息。字段名称是 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 计划是 None
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 字段是否为空。
plan中的字段html是单选按钮,传递一个值
试试这个:
elif request.POST.get('plan') == ' '
在 python 中,如果没有条目,方括号会给出错误,而 get 函数 returns None..
如果计划字段为空,则键 'plan'
将不存在于 request.POST
中。所以要验证这个字段是否为空,你可以这样做
elif request.POST.get('plan') is None:
因为如果计划字段为空,get
将 return None
。