Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

The QuerySet value for an exact lookup must be limited to one result using slicing.

Bom dia. Ao tentar fazer login, o sistema mostra uma mensagem de erro: ValueError at /usuarios/login. The QuerySet value for an exact lookup must be limited to one result using slicing. Segue abaixo o código da view de login:

def login(request):
    if request.method == 'POST':
        email = request.POST['email']
        senha = request.POST['senha']
        if email == "" or senha == "":
            print('Os campos email e senha não podem ficar em branco.')
            return redirect('login')
        print(email, senha)
        if User.objects.filter(email=email).exists():
            nome = User.objects.filter(email=email).values_list('username', flat=True)
            user = auth.authenticate(request, username=nome, password=senha)
            if user is not None:
                auth.login(request, user)
                print('Login realizado com sucesso.')
                return redirect('dashboard')
    return render(request, 'usuarios/login.html')
1 resposta
solução!

Oii Fernando, como você está?

Está faltando o método get ao fazer a captura de valor do nome do usuário. Através desse método dizemos ao Django que queremos obter um valor de campo específico de uma determinada instância do modelo, que nesse caso é o campo de username.

Sendo assim, na linha onde está:

nome = User.objects.filter(email=email).values_list('username', flat=True)

Mude para:

nome = User.objects.filter(email=email).values_list('username', flat=True).get()

Após isso, tente executar novamente =)

Qualquer dúvida estou por aqui, tá bom?

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software