Reputation: 1
I tried registering a user for the first time in Django but it was giving me this error
IntegrityError at /register/
UNIQUE constraint failed: accounts_user.username
Request Method: POST
Request URL: http://127.0.0.1:8000/register/
Django Version: 4.2.6
Exception Type: IntegrityError
Exception Value:
UNIQUE constraint failed: accounts_user.username
Exception Location: C:\Users\Joseynice\AppData\Local\Programs\Python\Python312\Lib\site-packages\django\db\backends\sqlite3\base.py, line 328, in execute
Raised during: accounts.views.register
Python Executable: C:\Users\Joseynice\AppData\Local\Programs\Python\Python312\python.exe
Python Version: 3.12.0
Python Path:
['C:\Users\Joseynice\Desktop\task_file',
'C:\Users\Joseynice\AppData\Local\Programs\Python\Python312\python312.zip',
'C:\Users\Joseynice\AppData\Local\Programs\Python\Python312\DLLs',
'C:\Users\Joseynice\AppData\Local\Programs\Python\Python312\Lib',
'C:\Users\Joseynice\AppData\Local\Programs\Python\Python312',
'C:\Users\Joseynice\AppData\Local\Programs\Python\Python312\Lib\site-packages']
Server time: Tue, 09 Jan 2024 14:21:19 +0000
I tried registering a user in Django see the error below`
File "C:\Users\Joseynice\AppData\Local\Programs\Python\Python312\Lib\site-
packages\django\db\backends\sqlite3\base.py", line 328, in execute
return super().execute(query, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django.db.utils.IntegrityError: UNIQUE constraint failed: accounts_user.username
[09/Jan/2024 15:25:43] "POST /register/ HTTP/1.1" 500 159087
#accounts.model
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
# Create your models here.
class UserManager(BaseUserManager):
def create_user(self, email, password1=None, **extra_fields):
if not email:
raise ValueError('The Email field must be set')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password1)
user.save(using=self._db)
return user
def create_superuser(self, email, password1=None, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
return self.create_user(email, password1, **extra_fields)
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
username = models.CharField(max_length=60, unique=True)
date_joined = models.DateTimeField(verbose_name="date joined", auto_now_add=True)
last_login = models.DateTimeField(verbose_name="last login", auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
def __str__(self):
return self.email
#accounts.view
# customusers/views.py
from django.contrib.auth import login, authenticate, logout
from django.contrib.auth.forms import AuthenticationForm
from django.shortcuts import render, redirect
from .forms import UserCreationForm
from django.contrib import messages
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
messages.success(request, 'Registration successful.')
return redirect('home')
else:
form = UserCreationForm()
return render(request, 'default/register.html', {'form': form})
def user_login(request):
if request.method == 'POST':
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
user = form.get_user()
login(request, user)
messages.success(request, 'Login successful.')
return redirect('profile')
else:
form = AuthenticationForm()
return render(request, 'default/login.html', {'form': form})
def user_logout(request):
logout(request)
messages.info(request, 'Logout successful.')
return redirect('login')
def profile(request):
return render(request, 'default/profile.html')
form.py
from django import forms
from django.contrib.auth.forms import UserCreationForm # type: ignore
from .models import User
class UserCreationForm(UserCreationForm):
class Meta:
model = User
fields = ['email', 'first_name', 'last_name', 'password1', 'password2']
register.html
<!-- accounts/templates/accounts/register.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>User Registration</title>
</head>
<body>
<h2>Register</h2>
<form method="post" action="{% url 'register' %}">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Register</button>
</form>
</body>
</html>
Upvotes: 0
Views: 56
Reputation: 37
In User model just change username: username = models.CharField(max_length=60) You should remove , unique=True.
Upvotes: 0