Joseynice
Joseynice

Reputation: 1

I encountered this error "UNIQUE constraint failed: accounts_user.username" while trying to register a user in my django project

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

Answers (1)

Fazle Rabbi
Fazle Rabbi

Reputation: 37

In User model just change username: username = models.CharField(max_length=60) You should remove , unique=True.

Upvotes: 0

Related Questions