2015-02-19 2 views
0

У меня есть простое приложение с двумя моделями - Client и Teacher, которые соединены OneToOne с пользователем Django по умолчанию.Устранение типа пользователя при аутентификации в Django

В приложении есть одна страница входа в систему. Основываясь на типе пользователя, я хочу перенаправить их на оба/myaccount, но показать разные шаблоны.

Вот мой код:

def user_login(request): 
context_dict ={} 

if request.method =='POST': 
    username = request.POST['username'] 
    password = request.POST['password'] 

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

    #teacher flow 
    if user.teacher: 
     if user.is_active: 
      login(request, user) 
      template = 'teacher_account.html' 
      context_dict['teacher'] = user 
      return render(request, template, context_dict) 
     else: 
      return HttpResponse("Your account is disabled") 
    #client flow 
    elif user.client: 
     if user.is_active: 
      login(request, user) 
      template = "client_account.html" 
      context_dict['client'] = user 
      return render(request, template, context_dict) 
     else: 
      return HttpResponse("Your account is disabled") 

    else: 
     print "Invalid login details: {0}, {1}".format(username, password) 
     return HttpResponse("Invalid login details supplied") 
#GET Request 
else: 
    return render(request, 'login.html', {}) 

Это на самом деле работает (вроде, редирект не делает, но делает Войти), если он является учителем. Я пробовал отладку, и если пользователь является клиентом, по какой-то причине поток не падает в другое, если только с ошибками. В отладчике я вижу, что клиентский объект существует, но я получаю сообщение об ошибке. RelatedObjectDoesNotExist. У пользователя нет учителя. Что я делаю не так?

Django 1.7, Python 2.7

ответ

1

The user.client это существует, но user.teacher не делает, так что вы получите сообщение об ошибке, то вы этот атрибут в if user.teacher: заявлении.

Заменить его с чем-то вроде этого:

if Teacher.objects.filter(user=user).exists(): 
    ... 
+0

Да, это работает! Любая идея о том, почему мой render() не работает? Я пытаюсь перенаправить на отдельный шаблон, основанный на регистрации типа пользователя. – cheenbabes

+0

Что вы подразумеваете под «render() не работает»? Вы получили ошибку? – catavaran

+0

Вместо перенаправления на шаблоны, которые я установил, например, teacher_account.html, его перенаправление на меня просто/ – cheenbabes