#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() для ввода данных.