2
respostas

get() returned more than one User -- it returned 2!

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.get(email=email@email.com).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')

Não estou conseguindo fazer o login com a conta criada por estar retornando esse erro.

2 respostas

Olá, Bruno.

Os erros estão no seguinte trecho do código:

nome = User.objects.get(email=email@email.com).values_list('username', flat=True)
  1. Você deve filtrar os objetos do modelo com o método filter.
  2. No filtro, o campo email está sendo comparado de forma errada.
  3. Após a filtragem e definição dos campos que se deseja retornar, é preciso executar o método get()

O comando correto ficaria assim, então:

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

obrigado!