title: How to use the user_passes_test decorator in class based views?
body: <p>I am trying to check certain conditions before the user is allowed to see a particular user settings page. I am trying to achieve this using the user_passes_test decorator. The function sits in a class based view as follows. I am using method decorator to decorate the get_initial function in the view.</p>
  
  <pre><code>class UserSettingsView(LoginRequiredMixin, FormView):
      success_url = '.'
      template_name = 'accts/usersettings.html'
  
      def get_form_class(self):
          if self.request.user.profile.is_student:
              return form1
          if self.request.user.profile.is_teacher:
              return form2
          if self.request.user.profile.is_parent:
              return form3
  
      @method_decorator(user_passes_test(test_settings, login_url='/accounts/usertype/'))
      def get_initial(self):
          if self.request.user.is_authenticated():
              user_obj = get_user_model().objects.get(email=self.request.user.email)
              if user_obj.profile.is_student:
                  return { ..........
         ...... .... 
  </code></pre>
  
  <p>Below is the test_settings function:</p>
  
  <pre><code>def test_settings(user):
      print "I am in test settings"
      if not (user.profile.is_student or user.profile.is_parent or user.profile.is_teacher):
          return False
      else:
          return True
  </code></pre>
  
  <p>I am getting the below error with the decorator.</p>
  
  <pre><code>File "../django/core/handlers/base.py", line 111, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "../django/views/generic/base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "../braces/views.py", line 107, in dispatch
    request, *args, **kwargs)
  File "../django/views/generic/base.py", line 87, in dispatch
    return handler(request, *args, **kwargs)
  File "../django/views/generic/edit.py", line 162, in get
    form = self.get_form(form_class)
  File "../django/views/generic/edit.py", line 45, in get_form
    return form_class(**self.get_form_kwargs())
  File "../django/views/generic/edit.py", line 52, in get_form_kwargs
    'initial': self.get_initial(),
  File "../django/utils/decorators.py", line 29, in _wrapper
    return bound_func(*args, **kwargs)
  TypeError: _wrapped_view() takes at least 1 argument (0 given)
  </code></pre>
  
  <p>I am not sure how to resolve this error. Am I applying the decorator on the wrong function? Any leads will be helpful.</p>