(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)
Вернуться на верх