2015-05-28 6 views
1

я иметь следующую модель:Джанго декоратор в зависимости от типа пользователя

class Developer(models.Model): 
    COUNTRIES = (
     ('U', 'United States'), 
     ('O', 'Other'), 
    ) 
    user = models.OneToOneField(User, related_name='freelancer_user') 
    country = models.CharField(max_length=1, choices=COUNTRIES, default='U') 


class Customer(models.Model): 
    user = models.OneToOneField(User, related_name='customer_user') 
    location = models.CharField(max_length=50, blank=True) 

У меня есть следующий вид:

@login_required 
def postjob(request): 
    job_form = JobCreateForm() 
    return render(request, 'myapp/postjob.html', {'job_form': job_form}) 

Это работает, насколько аутентификации. Но я хочу, чтобы только пользователь Клиента получал доступ к этому представлению, а не к разработчику. Как мне это сделать?

ответ

0

Вам нужен user_passes_test декоратора и функции тестирования:

@user_passes_test(is_customer) 
def postjob(request): 
    job_form = JobCreateForm() 
    return render(request, 'myapp/postjob.html', {'job_form': job_form}) 

Где is_customer что-то вроде:

def is_customer(user): 
    # how do you tell the user is a customer? 
    if user.is_staff or user.is_superuser: 
     return False 
    return True 
+0

привет. это сработало. мы можем отобразить сообщение тоже? что-то вроде «вы не можете опубликовать работу, потому что вы разработчик!» – Abhishek

+0

Существует несколько способов достижения этого, но все они вращаются вокруг, используя параметр login_url, чтобы перенаправить пользователя в пользовательский режим просмотра или отправить сообщение как параметр «получить», пожалуйста, проверьте документы. –