(1062, "Дублирующая запись '' для ключа 'email'") и (1062, "Дублирующая запись '' для ключа 'phone'") в Django
Я пытаюсь реализовать страницу Sign Up в Django, используя модели User. На HTML странице есть поле ввода для email или номера телефона. Значение, которое я получил из этого поля, присваивается username в Django User model и если введенное значение - email, то значение присваивается email в User model. В противном случае значение присваивается phone в модели User. Когда я запускаю сервер, пользователь может ввести свои данные с email один раз. Во второй раз и далее я получаю ошибку следующего вида:
IntegrityError at /Accounts/CandidateRegister/
(1062, "Duplicate entry '' for key 'phone'")
Request Method: POST
Request URL: http://127.0.0.1:8000/Accounts/CandidateRegister/
Django Version: 4.0.2
Exception Type: IntegrityError
Exception Value:
(1062, "Duplicate entry '' for key 'phone'")
Exception Location: C:\job\venv\lib\site-packages\MySQLdb\connections.py, line 254, in query
Python Executable: C:\job\venv\Scripts\python.exe
Python Version: 3.9.7
Python Path:
['C:\\job\\jobsite',
'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip',
'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\DLLs',
'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\lib',
'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39',
'C:\\job\\venv',
'C:\\job\\venv\\lib\\site-packages']
Подобным образом, когда пользователь вводит свой номер телефона, его данные сохраняются в базе данных один раз. После этого я получаю ошибку следующего вида:
IntegrityError at /Accounts/CandidateRegister/
(1062, "Duplicate entry '' for key 'email'")
Request Method: POST
Request URL: http://127.0.0.1:8000/Accounts/CandidateRegister/
Django Version: 4.0.2
Exception Type: IntegrityError
Exception Value:
(1062, "Duplicate entry '' for key 'email'")
Exception Location: C:\job\venv\lib\site-packages\MySQLdb\connections.py, line 254, in query
Python Executable: C:\job\venv\Scripts\python.exe
Python Version: 3.9.7
Python Path:
['C:\\job\\jobsite',
'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip',
'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\DLLs',
'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39\\lib',
'C:\\Users\\Student\\AppData\\Local\\Programs\\Python\\Python39',
'C:\\job\\venv',
'C:\\job\\venv\\lib\\site-packages']
Может ли кто-нибудь предложить решение, чтобы решить эту проблему.
HTML-код:
models.py
class User(AbstractUser):
email = models.CharField(max_length=30,unique=True)
phone = models.CharField(max_length=30,unique=True)
terms_and_conditions_confirmed = models.BooleanField()
otp = models.CharField(max_length=6)
type = models.CharField(max_length=30)
views.py
def candidateregister(request):
User = get_user_model()
if request.method=='POST':
fname = request.POST.get('cafname')
lname = request.POST.get('calname')
email_phone = request.POST.get('caemorpn')
password1 = request.POST.get('capassword1')
password2 = request.POST.get('capassword2')
terms = request.POST.get('cagridCheck')
type = request.POST.get('catype')
if terms == 'on':
terms = True
else:
terms = False
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
if (re.fullmatch(regex, email_phone)):
if (User.objects.filter(email=email_phone).exists()):
messages.info(request, "Email ID Already Taken")
return redirect('register')
user = User.objects.create_user(first_name=fname, last_name=lname, password=password1,
terms_and_conditions_confirmed=terms, type=type, email=email_phone,username=email_phone)
user.save()
return redirect('login')
else:
if (User.objects.filter(phone=email_phone).exists()):
messages.info(request, "Phone number Already Taken")
return redirect('register')
user = User.objects.create_user(first_name=fname, last_name=lname, password=password1,
terms_and_conditions_confirmed=terms, type=type,phone=email_phone,username=email_phone)
user.save()
return redirect('login')
Просто установите unique=False в models.py пример:
class User(AbstractUser):
email = models.CharField(max_length=30,unique=False)
phone = models.CharField(max_length=30,unique=False)