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