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 создать файл миграции и перенести базу данных. Однако прежде чем это сделать, вам придется поискать дубликаты в уже существующей базе данных. Если это так, то вам следует сначала устранить их, например, удалив дубликаты.

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