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'