Django – authenticate () Ya existe un usuario con ese nombre de usuario

Bien estoy confundido

Estoy intentando crear una página de inicio de sesión, pero cada vez que bash iniciar sesión, django da el error de que el nombre de usuario ya existe. No he usado save() ninguna parte.

Estoy usando authenticate() , recomendé los documentos de Django para eso: https://docs.djangoproject.com/en/1.10/topics/auth/default/#how-to-log-a-user-in

Aquí está mi código, por favor, dime a dónde me voy mal:

forms.py

 class LoginForm(forms.ModelForm): username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username'})) password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password'})) class Meta: model = User fields = ['username', 'password'] 

vistas.py

 class LoginFormView(View): form_class = LoginForm template_name = 'login.html' # display a blank form def get(self, request): form = self.form_class(None) return render(request, self.template_name, {'form': form}) # authenticate user def post(self, request): form = self.form_class(request.POST) if form.is_valid(): username = form.cleaned_data['username'] password = form.cleaned_data['password'] user = authenticate(username=username, password=password) if user is not None: if user.is_active: login(request, user) return redirect('slrtcebook:home') return render(request, self.template_name, {'form': form}) 

login.html

 
{% csrf_token %} {% for field in form %} {{ field }} {{ field.errors }} {% endfor %}

Don't have an account? Register here

No use un ModelForm para esto; asumirá que está intentando crear un usuario y validará que puede hacerlo con los datos que ha ingresado. Simplemente use un formulario estándar – herede de forms.Form y elimine la clase Meta.

Para aquellos de ustedes que quieren el código aquí es lo que hice para solucionarlo:

dentro de views.py:

 class UserLoginView(View): form_class = LoginForm template_name = 'music/login_form.html' #display a blank form def get(self, request): form = self.form_class(None) return render(request, self.template_name, {'form': form}) #proces form data def post(self, request): form = self.form_class(request.POST) if form.is_valid(): # user = form.save(commit=False) #cleaned (normalized) data username = form.cleaned_data['username'] password = form.cleaned_data['password'] # user.set_password(password) #this is the only way to change a password because of hashing #returns the User obejects if credintials are correct user = authenticate(username=username, password=password) if user is not None: if user.is_active: login(request, user) return redirect('music:index') return render(request, self.template_name,{'form': form}) 

dentro de froms.py:

 class LoginForm(forms.Form): username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username'})) password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password'})) fields = ['username', 'password'] 

no olvide importar también LoginForm en la parte superior de views.py, donde importa UserForm:

 from .forms import UserForm, LoginForm