Home > OS >  UNIQUE constraint failed: auth_user.username while trying to register the user in django
UNIQUE constraint failed: auth_user.username while trying to register the user in django

Time:11-28

I have written following set of code in views.py of my project but when I try to register the user info as an object in the database, above mentioned error arrived

views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
from django.contrib import messages
from django.shortcuts import redirect, render

# Create your views here.
def home(request):
    return render(request, "authentication/index.html")

def signin(request):

    if request.method == "post":
        username = request.POST['username']
        pass1 = request.POST['pass1']

        user = authenticate(username = username, password=pass1)

        if user is not None:
            login(request, user)
            fname = user.first_name
            return render(request, 'authenticate/index.html', {'fname' : fname})
        else:
            messages.error(request, 'Bad credentials')
            return redirect('home')

    return render(request, "authentication/signin.html")

def signup(request):

    if request.method == "POST":
        # username = request.POST.get('username')
        username = request.POST['username']
        fname = request.POST['fname']
        lname = request.POST['lname']
        email = request.POST['email']
        pass1 = request.POST['pass1']
        pass2 = request.POST['pass2']

        myuser = User.objects.create_user(username, email, pass1)   ## Error is coming in this line ##
        myuser.firstname = fname
        myuser.lastname = lname

        myuser.save()

        messages.success(request, 'Your account has been succesfully created.')

        return redirect('/signin')
        


    return render(request, "authentication/signup.html")

def signout(request):
    pass

I am trying to make user login system and following error has arrived in views.py of my app. enter image description here

CodePudding user response:

Most probably the username already exists in the database as you haven't used django forms so maybe the validation isn't done correctly with your manually defined html fields.

Also create_user() method doesn't require save() method to be called for updating the fields, the thing you can do is save(commit=False) but I think you can directly use create() method.

You should first check whether the user with username already exists in the database or not.

Use this view:

from django.contrib import messages
def signup(request):

    if request.method == "POST":
     
        username = request.POST['username']
        try:       
            user_exist_or_not=User.objects.get(username=username)  
            messages.error(request,"user already exists")
            return redirect("some_error_page")
        
        except User.DoesNotExist:
            print("user does not exist")
       
        fname = request.POST['fname']
        lname = request.POST['lname']
        email = request.POST['email']
        pass1 = request.POST['pass1']
        pass2 = request.POST['pass2']

        myuser = User.objects.create(username=username, email=email, password=pass1,first_name=fname,last_name=lname)

        messages.success(request, 'Your account has been succesfully created.')

        return redirect('/signin')
        


    return render(request, "authentication/signup.html")
  • Related