Wednesday, November 15, 2017

Manager isn't available; 'auth.User' has been swapped for 'common.User'

Any hints appreciated. I'm stumped. Traceback at the end.

Many thanks

Mike

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

I have a custom user based on AbstractUser plus a UserProfile model as follows:

#common.models  from django.conf import settings  from django.contrib.auth.models import AbstractUser, Group, UserManager  from django.db import models  from django.utils.encoding import python_2_unicode_compatible      @python_2_unicode_compatible  class User(AbstractUser):        objects = UserManager()        class Meta:          abstract = False        def __str__(self):          grps = u''          superuser = u''          if self.is_staff:              superuser = u' [Staff]'          if self.is_superuser:              superuser = u' [Superuser]'          if not self.is_active:              superuser += u' [Inactive]'          groups = Group.objects.filter(user=self).order_by('name')          if groups:              grps = u', '.join(grp.name for grp in groups)          if grps:              grps = u' (%s)' % grps          grps += superuser          return u'%s%s' % (self.username, grps)        def save(self, *args, **kwargs):          super(User, self).save(*args, **kwargs)          # not sure whether to use the post-save signal or just save it here          profile = UserProfile.objects.get_or_create(user=self)[0]          profile.save()      @python_2_unicode_compatible  class UserProfile(models.Model):        user = models.OneToOneField(          settings.AUTH_USER_MODEL,          related_name='userprofile',          on_delete=models.CASCADE,      )      ...      created = models.DateTimeField(auto_now_add=True)      modified = models.DateTimeField(auto_now=True)        class Meta:          verbose_name = 'user profile'          verbose_name_plural = 'user profile'        def __str__(self):          return u'%s' % self.user    
The error occurs when I click [Register] with a new user via the following view:

#common.views  from django.contrib.auth import login, authenticate  from django.contrib.auth.forms import UserCreationForm  from django.shortcuts import render, redirect    def register(request):      if request.method == 'POST':          form = UserCreationForm(request.POST)          if form.is_valid():              form.save()              username = form.cleaned_data.get('username')              raw_password = form.cleaned_data.get('password1')              user = authenticate(username=username, password=raw_password)              login(request, user)              return redirect('common.views.homepage')      else:          form = UserCreationForm()      return render(request, 'register.html', {'form': form})    
For completeness here is the template:

#register.html   {% extends 'base_site.html' %}  {% block content %}    <h2>Register</h2>    <form method="post">      {% csrf_token %}      {{ form.as_p }}      <button type="submit">Register</button>    </form>  {% endblock %}     
Traceback ...

Environment:      Request Method: POST  Request URL: http://localhost:8000/register/    Django Version: 1.11.6  Python Version: 3.6.1  Installed Applications:  ['django.contrib.admin',   'django.contrib.admindocs',   'django.contrib.auth',   'django.contrib.contenttypes',   'django.contrib.sessions',   'django.contrib.messages',   'django.contrib.staticfiles',   'django.contrib.sites',   'common',   'course',   'credit']  Installed Middleware:  ['django.middleware.security.SecurityMiddleware',   'django.contrib.sessions.middleware.SessionMiddleware',   'django.middleware.common.CommonMiddleware',   'django.middleware.csrf.CsrfViewMiddleware',   'django.contrib.auth.middleware.AuthenticationMiddleware',   'django.contrib.messages.middleware.MessageMiddleware',   'django.middleware.clickjacking.XFrameOptionsMiddleware']        Traceback:    File "C:\Users\mike\env\xxct3\lib\site-packages\django\core\handlers\exception.py" in inner    41.             response = get_response(request)    File "C:\Users\mike\env\xxct3\lib\site-packages\django\core\handlers\base.py" in _get_response    187.                 response = self.process_exception_by_middleware(e, request)    File "C:\Users\mike\env\xxct3\lib\site-packages\django\core\handlers\base.py" in _get_response    185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)    File "C:\Users\mike\env\xxct3\train\common\views.py" in register    36.         if form.is_valid():    File "C:\Users\mike\env\xxct3\lib\site-packages\django\forms\forms.py" in is_valid    183.         return self.is_bound and not self.errors    File "C:\Users\mike\env\xxct3\lib\site-packages\django\forms\forms.py" in errors    175.             self.full_clean()    File "C:\Users\mike\env\xxct3\lib\site-packages\django\forms\forms.py" in full_clean    386.         self._post_clean()    File "C:\Users\mike\env\xxct3\lib\site-packages\django\forms\models.py" in _post_clean    413.             self.instance.full_clean(exclude=exclude, validate_unique=False)    File "C:\Users\mike\env\xxct3\lib\site-packages\django\db\models\base.py" in full_clean    1235.             self.clean()    File "C:\Users\mike\env\xxct3\lib\site-packages\django\contrib\auth\models.py" in clean    349.         self.email = self.__class__.objects.normalize_email(self.email)    File "C:\Users\mike\env\xxct3\lib\site-packages\django\db\models\manager.py" in __get__    198.                     cls._meta.swapped,    Exception Type: AttributeError at /register/  Exception Value: Manager isn't available; 'auth.User' has been swapped for 'common.User'    





No comments:

Post a Comment