Как исправить create() принимает 1 позиционный аргумент, но было задано 5 В python django

Я создаю форму входа и регистрации в Django. Я получил ошибку create() takes 1 positional argument but 5 were given.

код:

def register(request):
    if request.method=="POST":
        username=request.POST['username']
        name=request.POST['name']
        email=request.POST['email']
        password=request.POST['password']
        user_create = User.objects.create(username,name,email,password)
        user_create.save()
        messages.success(request, " Your account has been successfully created")
        return redirect("/")
    else:
        return HttpResponse("404 - Not found")

html

https://paste.pythondiscord.com/amoturoqop.xml

Вам следует работать с .create_user(…) [Django-doc] и работать с именованными параметрами, а не позиционными:

user_create = User.objects.create_user(
    username=username,
    first_name=name,
    email=email,
    password=password
)

Функция .create_user(…) хэширует пароль таким образом, чтобы пользователь мог быть аутентифицирован должным образом.

Хотя первые три параметра - username, email и password и вы, таким образом, можете передать их как позиционный параметр, я бы не советовал этого делать, поскольку явный лучше неявного (часть The Zen of Python).

Поскольку .create_user(…) сохранит объект в базе данных, вам не нужно .save() выполнять user_create:

def register(request):
    if request.method == 'POST':
        username=request.POST['username']
        name=request.POST['name']
        email=request.POST['email']
        password=request.POST['password']
        User.objects.create_user(
            username=username,
            first_name=name,
            email=email,
            password=password
        )
        messages.success(request, 'Your account has been successfully created')
        return redirect('/')
    else:
        return HttpResponse('404 - Not found', status=404)

Попробуйте это:

def register(request):
    if request.method=="POST":
        username=request.POST['username']
        name=request.POST['name']
        email=request.POST['email']
        password=request.POST['password']

        instance, created = User.objects.update_or_create(
            username=username,
            defaults={'username': username, 'name': name, 'email': email, 'password': password},
        )

        if created:
            messages.success(request, " Your account has been successfully created")
        else:
            messages.success(request, " Your account has been successfully updated")
        
        return redirect("/")
    else:
        return HttpResponse("404 - Not found")

Пояснение:

Если вы столкнулись с проблемой

, UNIQUE constraint failed: auth_user.username, то update_or_create решит ее. Он обновит данные, если будут найдены существующие, в противном случае он создаст их.

Если пользователь существует username=username, то обновите значения по умолчанию, иначе создайте нового пользователя со значениями по умолчанию

.
Вернуться на верх