#python #django
Вопрос:
Я получаю сообщение об ошибке индексы кортежей должны быть целыми числами или срезами, а не пользователь также индексы кортежей должны быть целыми числами или срезами, а не нетипом Я проверяю, существует ли какое-либо из этих имен пользователя или электронной почты или нет, также существует() не работает только первый() не работает примечание Я использую python 3.9.4
if User.objects.filter(username=username).exists() or User.objects.filter(email=email).exists():
error_message = ''
email_error = ('', 'Email is taken. ')[User.objects.filter(email=email).exists()]
username_error = ('', 'Username is taken. ')[User.objects.filter(username=username).exists()]
error_message = email_error username_error
messages.success(request, error_message)
return redirect('/register/')
Комментарии:
1. С чем ты пытаешься это сделать
email_error = ('', 'Email is taken. ')[User.objects....
? Это причина ошибки, потому что вы пытаетесь срезать кортеж по набору запросов2. Вы хотите проверить поле имени пользователя в представлении регистрации?
3. У меня есть регистрационная форма, в которой есть поля, такие как имя пользователя по электронной почте, поэтому я проверяю, зарегистрирован ли какой-либо пользователь ранее или нет, введя имя пользователя или адрес электронной почты, но это не работает, должно отображаться сообщение о том, что имя пользователя занято или электронная почта занята
4. Нет, я хочу проверить, существует имя пользователя или адрес электронной почты или нет, и отобразить сообщение
Ответ №1:
В этой строке
email_error = ('', 'Email is taken. ')[User.objects.filter(email=email).exists()]
вы создаете кортеж с частью ('', 'Email is taken. ')
. Затем вы пытаетесь получить значение определенного индекса для этого кортежа, используя третьи скобки [ ]
. Однако вы передаете логическое значение, пытаясь получить доступ к значению, хранящемуся в индексе этого кортежа.
Мне кажется, что у вас есть некоторая путаница в отношении кортежей или того, что это ('', 'Email is taken. ')
на самом деле делает.
Возможное решение для этого: Обратите внимание, что это мой способ решения этой проблемы, и это может отличаться от людей к людям.
is_duplicate_username = User.objects.filter(username=username).exists()
is_duplicate_email = User.objects.filter(email=email).exists()
if is_duplicate_username or is_duplicate_email:
error_message = ''
error_message = error_message 'Email is taken' if is_duplicate_email else error_message
error_message = error_message 'Username is taken' if is_duplicate_username else error_message
messages.success(request, error_message)
return redirect('/register/')