The fix is to adjust 1.11 django.contrib.auth.forms as follows:
Line 12 - comment it right out
Line 88 - change User to UserModel
Line 128 - change User to UserModel
Here is the diff ...
@@ -9,7 +9,7 @@ from django.contrib.auth import (
from django.contrib.auth.hashers import (
UNUSABLE_PASSWORD_PREFIX, identify_hasher,
)
-from django.contrib.auth.models import User
+#from django.contrib.auth.models import User
from django.contrib.auth.tokens import default_token_generator
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import EmailMultiAlternatives
@@ -85,7 +85,7 @@ class UserCreationForm(forms.ModelForm):
)
class Meta:
- model = User
+ model = UserModel
fields = ("username",)
field_classes = {'username': UsernameField}
@@ -125,7 +125,7 @@ class UserChangeForm(forms.ModelForm):
)
class Meta:
- model = User
+ model = UserModel
fields = '__all__'
field_classes = {'username': UsernameField}
Cheers
Mike
On 16/11/2017 3:18 PM, Mike Dewhirst wrote:
> 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'
>
>
>
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to django-users+unsubscribe@googlegroups.com
> <mailto:django-users+unsubscribe@googlegroups.com>.
> To post to this group, send email to django-users@googlegroups.com
> <mailto:django-users@googlegroups.com>.
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/0d3930be-30cb-8dc8-d0c9-a8f34e46e781%40dewhirst.com.au
> <https://groups.google.com/d/msgid/django-users/0d3930be-30cb-8dc8-d0c9-a8f34e46e781%40dewhirst.com.au?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/2e767639-51b7-f172-51a4-2480c77a047e%40dewhirst.com.au.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment