Я делаю в соответствии с документами 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)