A new user is logged into the database, but not logged in. I get the error " 'AnonymousUser' object has no attribute '_met ".

forms.py

from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from django.db import models class RegistrationForm(UserCreationForm): email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'placeholder': 'E-mail'})) class Meta: model = User fields = ['username'] def clean_email(self): email = self.cleaned_data['email'] try: User.objects.get(email=email) except User.DoesNotExist: return email raise forms.ValidationError('email already exist') def save(self, commit=True): user = super(RegistrationForm, self).save(commit=False) user.username = self.cleaned_data['email'] user.email = self.cleaned_data['email'] if commit: user.is_active = False user.save() return user 

views.py

 from django.shortcuts import render, HttpResponseRedirect from django.contrib import auth from .forms import RegistrationForm def register(request): if request.method == "POST": form = RegistrationForm(request.POST) if form.is_valid(): user = form.save() # user.set_password() user = auth.authenticate(username=form.cleaned_data.get('username'), password=form.cleaned_data.get('password1')) auth.login(request, user) return HttpResponseRedirect('/profile') else: form = RegistrationForm() return render(request, 'fighter/register.html', {'form': form}) 

Python3.5 and Django1.10

Environment:

Request Method: POST Request URL: http: // localhost: 8000 / register /

Django Version: 1.10.6 Python Version: 3.5.2

Traceback:

File "/home/google/.virtualenvs/master/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner 42. response = get_response (request)

File "/home/google/.virtualenvs/master/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 187. response = self.process_exception_by_middleware (e, request)

File "/home/google/.virtualenvs/master/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 185. response = wrapped_callback (request, * callback_args, ** callback_kwargs)

File "/home/google/webapp/englishfighter/fighter/views.py" in register 27. auth.login (request, user)

File "/home/google/.virtualenvs/master/lib/python3.5/site-packages/django/contrib/auth/ init .py" in login 124. request.session [SESSION_KEY] = user._meta.pk.value_to_string (user)

File "/home/google/.virtualenvs/master/lib/python3.5/site-packages/django/utils/functional.py" in inner 235. return func (self._wrapped, * args)

Exception Type: AttributeError at / register / Exception Value: 'AnonymousUser' object has no attribute '_meta'

  • Please write a traceback error. For example, it should be not _met , but _meta , if I correctly understand the error. - Mae
  • Yes, you understood correctly, I did not copy it to the end. - Mike Ru

1 answer 1

The following lines:

 auth.login(request, user) return HttpResponseRedirect('/profile') 

must be included in the if form.is_valid(): block if form.is_valid():