TypeError at /register 'CustomUser' object is not subscriptable
Я пытаюсь зарегистрировать нового пользователя и получаю эту ошибку. Я пробовал другие подобные проблемы и решения, но не добился успеха.
полное отслеживание
Internal Server Error: /register
Traceback (most recent call last):
File "/home/sharhan/DEV/PYTHON/DEVELOPMENT/allauth-tutorial/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/sharhan/DEV/PYTHON/DEVELOPMENT/allauth-tutorial/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/sharhan/DEV/PYTHON/DEVELOPMENT/allauth-tutorial/authentication/views.py", line 38, in register_view
CustomUser.objects.get(email__iexact=email)[0]
TypeError: 'CustomUser' object is not subscriptable
register_view in views.py
def register_view(request):
if request.user.is_authenticated:
return redirect('home')
else:
form = CustomUserCreationForm()
if request.method == 'POST':
form = CustomUserCreationForm(request.POST or None)
if form.is_valid():
form.save()
user_name = form.cleaned_data['username']
messages.info(request, 'Account created for ' + user_name)
return redirect('login')
else:
form = CustomUserCreationForm(request.POST)
else:
form = CustomUserCreationForm()
return render(request, 'register.html', {'form': form})
models.py
class CustomUser(AbstractUser):
# add additional fields in here
country = models.CharField(max_length=200, null=True, blank=True)
age = models.IntegerField(default=False, null=True, blank=True)
status = models.BooleanField(default=False, null=True, blank=True)
def __str__(self):
return self.email
forms.py
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ['username', 'email', 'country', 'age', 'status', 'password1', 'password2']
Второе - я также пытаюсь реализовать функциональность, которую я не знаю с чего начать. Если новый пользователь снова использует тот же email для регистрации, он должен выдать ошибку. Он должен быть уникальным и никакого двойного использования email для регистрации. Функциональность имени пользователя уже реализована в Django, поэтому он выдает ошибку, если существующее имя пользователя уже используется
Поскольку первая проблема была решена и была вызвана тем, что IDE не сохранила файл должным образом, этот ответ касается только второй части вопроса:
Второе - я также пытаюсь реализовать функциональность, которую я не знаю с чего начать. Если новый пользователь снова использует тот же email для регистрации, он должен выдать ошибку.
Вы можете сделать поле email уникальным, переписав его в модели CustomUser с параметром unique=True [Django-doc]. Это обеспечит унификацию как для базы данных, так и для ModelForms, ModelAdmins, ModelSerializers и многих других инструментов Django, которые зависят от этой модели:
from django.db import models
from django.utils.translation import gettext_lazy as _
class CustomUser(AbstractUser):
email = models.EmailField(_('email address'), unique=True)
# add additional fields in here
# ⋮
def __str__(self):
return self.email
Затем вы можете позволить Django создать файл миграции и перенести базу данных. Однако прежде чем это сделать, вам придется поискать дубликаты в уже существующей базе данных. Если это так, то вам следует сначала устранить их, например, удалив дубликаты.