Django Manager isn't available

Viewed 230

AttributeError at /register/ Manager isn't available; 'auth.User' has been swapped for 'accounts.Account' I'm trying to create a registration form but getting the AttributeError. How can to avoid the error?

Here is the code in of my custom model in models.py

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


class MyAccountManager(BaseUserManager):
    def create_user(self, email, username, password=None):
        if not email:
            raise ValueError('Users must have an email address')
        if not username:
            raise ValueError('Users must have a username')

        user = self.model(
            email=self.normalize_email(email),
            username=username,
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, username, password):
        user = self.create_user(
            email=self.normalize_email(email),
            password=password,
            username=username,
        )
        user.is_admin = True
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)
        return user


class Account(AbstractBaseUser):

    email                   = models.EmailField(verbose_name="email", max_length=60, unique=True)
    username                = models.CharField(max_length=30, unique=True)
    date_joined             = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
    last_login              = models.DateTimeField(verbose_name='last login', auto_now=True)
    about                   = models.TextField(('about'), max_length=500, blank=True)
    is_admin                = models.BooleanField(default=False)
    is_active               = models.BooleanField(default=True)
    is_staff                = models.BooleanField(default=False)
    is_superuser            = models.BooleanField(default=False)


    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

    objects = MyAccountManager()

    def __str__(self):
        return self.email

    # For checking permissions. to keep it simple all admin have ALL permissons
    def has_perm(self, perm, obj=None):
        return self.is_admin

    # Does this user have permission to view this app? (ALWAYS YES FOR SIMPLICITY)
    def has_module_perms(self, app_label):
        return True

views.py

    from django.shortcuts import render
    from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
    from .forms import *
    from django.contrib.auth import get_user_model
    
def register_view(request, *args, **kwargs):
    form = CreateUserForm(request.POST or None)
    if form.is_valid():
        user = form.save(commit=True)
        user.set_password(form.cleaned_data.get('password1'))
    context = {
        'form':form,
        'btn_label':'Register',
        'title':'Register'
    }
    return render(request, 'auth/auth.html', context)

I updated the setting.py file and set the following link to the Account model in accounts app settings.py

AUTH_USER_MODEL = 'accounts.Account'

Traceback

Exception Type: AttributeError at /register/
Exception Value: Manager isn't available; 'auth.User' has been swapped for 'accounts.Account'
0 Answers
Related