Ошибка типа Django в / signup / create_user () отсутствует 1 обязательный позиционный аргумент: 'username' - PullRequest
0 голосов
/ 01 декабря 2018

Я делаю в соответствии с документами Django, которые говорят:

Если ваша пользовательская модель определяет username, email, is_staff, is_active, is_superuser, last_login и date_joined поля такие же, как и у пользователя Django по умолчанию, вы можете просто установить Django UserManager ...

Мои намерения: я не хочу использовать имя пользователя для создания пользователя, яхочу использовать, но по электронной почте, поэтому, когда я это делаю, я получаю эту ошибку:

"TypeError at /signup/ create_user() missing 1 required positional argument: 'username'". 

Вот мой код:

models.py

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, UserManager


 class User(AbstractBaseUser):
    email = models.EmailField(unique=True, blank=False)
    date_joined = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_superuser = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'

    objects = UserManager()

просмотров.py

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            if form.cleaned_data['password'] != form.cleaned_data['repeat_password']:
                context['form'] = SignUpForm(request.POST)
                context['error'] = 'Passwords did not match'
                return render(request, 'shopapp/signup.html', context)
            else:
                # Creating the user here 
                email = form.cleaned_data['email']
                password = form.cleaned_data['password']
                user = User.objects.create_user(email=email)
                user.set_password(password)
                return HttpResponse('{} {}'.format('User created succesfully', User.objects.all()))

        return HttpResponse('Form is not ok')
    else:
        form = SignUpForm()
        context['title'] = 'Signup'
        context['form'] = form
        return render(request, 'shopapp/signup.html', context)

1 Ответ

0 голосов
/ 01 декабря 2018

Но бит, который вы цитируете из документов, явно указывает, что класс UserManager предполагает, что у вас есть и имя пользователя, и поле электронной почты.Поскольку вы этого не сделаете, вам нужно будет создать свой собственный подкласс, который определяет метод create_user, но не ожидает параметра username.

Однако в вашем коде вам на самом деле не нужновызовите этот метод.Основная причина для этого заключается в том, что он устанавливает пароль;но вы на самом деле делаете это отдельно в любом случае.Таким образом, вы можете просто создать пользователя как обычный экземпляр модели:

user = User(email=email)
user.set_password(password)
user.save()

Также обратите внимание, что проверка паролей должна идти в методе clean() формы, а не в представлении.

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