Tengo una vista de inicio de sesión que comprueba si los usuarios de inicio de sesión son clientes o pilotos y los redirige adecuadamente, pero sigo recibiendo un error no definido. Cualquier ayuda será apreciada.

views.py

def signin (request):
 if request.method == 'POST':
    username = request.POST['username']
    password = request.POST['password']

    user = auth.authenticate(username=username, password=password)

    if user is not None:
        auth.login(request,user)
        messages.success(request, 'You are now logged in')
        if user.role == 'client':
            def ef (self):
                return redirect(reverse('dashboard', kwargs={"pk": self.pk}))
        else:
            return redirect(reverse('pilot_dashboard', kwargs={"pk": self.pk}))
    else:
        messages.error(request, 'Invalid Credentials')
        return redirect ('login')

 else:
    return render (request, 'accounts/signin.html')
0
flow 2 oct. 2019 a las 07:50

3 respuestas

La mejor respuesta

Tiene lo siguiente en su código:

    if user.role == 'client':
        def ef (self):
            return redirect(reverse('dashboard', kwargs={"pk": self.pk}))
    else:
        return redirect(reverse('pilot_dashboard', kwargs={"pk": self.pk}))

El def ef (self) no es necesario y tampoco funciona de esta manera. Solo quita esa.

Además, está utilizando self.pk, que no es posible allí. Si desea acceder a los usuarios pk, simplemente use user.pk ya que su usuario se guarda en la variable user, no self.

2
wfehr 2 oct. 2019 a las 05:03

Espero que el siguiente cambio resuelva tu problema.

def signin (request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']

        user = auth.authenticate(username=username, password=password)

        if user is not None:
            auth.login(request,user)
            messages.success(request, 'You are now logged in')
            if user.role == 'client':
                return redirect(reverse('dashboard', kwargs={"pk": user.pk}))
            else:
                return redirect(reverse('pilot_dashboard', kwargs={"pk": user.pk}))
        else:
            messages.error(request, 'Invalid Credentials')
            return redirect ('login')

    else:
        return render (request, 'accounts/signin.html')

El principal problema fue que aquí no hay ninguna instancia self. Este es el usuario, supongo.

0
Shakil 2 oct. 2019 a las 06:05

No necesitas construcción:

def ef (self):

En realidad, no tiene que devolver la función, debe devolver la redirección.

0
asiniy 2 oct. 2019 a las 04:59
58195375