Получение многозначной ошибки при проверке пустого поля

#python #django #django-views

#питон #джанго #джанго-просмотры

Вопрос:

У меня есть форма регистрации, в которой пользователь выбирает план. Я пытаюсь проверить, что, если поле пустое, должно отображаться сообщение. Имя поля-план. Код приведен ниже

 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')  

Я перепробовал несколько способов проверить, пустое поле плана или нет, например

план элифа == ‘ ‘

элиф не планировала

плана элифа нет

запрос элифа.СООБЩЕНИЕ[‘план’] == ‘ ‘

за все это я получаю только одну ошибку

 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:UsersrickbEnvsvirenvlibsite-packagesdjangoutilsdatastructures.py, line 78, in __getitem__ Python Executable: C:UsersrickbEnvsvirenvScriptspython.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  

Я не понимаю, почему я это получаю, пожалуйста, исправьте меня, что я делаю неправильно и как проверить, что поле плана пустое.

Поле плана в html-файле представляет собой переключатель, передающий значение

Комментарии:

1. Вы пробовали распечатать план? Может быть, что-то не так с переменной плана.

Ответ №1:

Попробуйте вместо этого:

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

В квадратных скобках python указывается ошибка, если записи нет, тогда как функция get не возвращает ее..

Комментарии:

1. О, так жаль, я не заметил, что ответы от двух разных людей.

2. Спасибо за разъяснение причины, а также за то, почему я должен использовать .get()

3. Потому что функция get возвращает None , если plan не будет существовать, в то время [] как возвращает MultiDictError

4. хорошо, спасибо, теперь мне ясна концепция

Ответ №2:

Если поле план пустое, ключ 'plan' не будет существовать внутри request.POST . Поэтому, чтобы проверить, пусто ли это поле, вы можете сделать это

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

Так get как вернется None , если поле план пустое.

Комментарии:

1. Спасибо, что объяснили разницу, отныне я буду использовать функцию POST.get() для ввода данных.