Сбой ограничения UNIQUE: auth_user.username при попытке зарегистрировать пользователя в django

Я написал следующий набор кода в views.py моего проекта, но когда я пытаюсь зарегистрировать информацию о пользователе как объект в базе данных, возникает вышеупомянутая ошибка

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

Я пытаюсь сделать систему входа пользователей и в файле views.py моего приложения возникла следующая ошибка. введите описание изображения здесь

Скорее всего, username уже существует в базе данных, так как вы не использовали django forms, поэтому, возможно, валидация не выполняется правильно с вашими вручную определенными html-полями.

Также метод create_user() не требует вызова метода save() для обновления полей, то что вы можете сделать это save(commit=False), но я думаю, что вы можете напрямую использовать метод create().

Вы должны сначала проверить, существует ли уже пользователь с именем пользователя в базе данных или нет.

Используйте этот вид:

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