title: Django is throwing TypeError: _wrapped_view() missing 1 required positional argument: 'request'
body: <p>Can someone please help me fix this error: _wrapped_view() missing 1 required positional argument: 'request'? I am still learning. I am not even what the error means other than that I am missing a request somewhere.</p>
  
  <p>If it helps, what I am trying to do is create a ModelForm that allows users to add content to the site, once they are logged in.</p>
  
  <p>Any help and explanation of what I am doing wrong will be greatly appreciated. Thank you in advance.</p>
  
  <p>Here are my models:</p>
  
  <pre><code>from django.db import models
  from cloudinary.models import CloudinaryField
  
  import numpy as np
  
  
  class Model(models.Model):
      name = models.CharField(max_length=200)
      instagram = models.CharField(max_length=200, default='')
      twitter = models.CharField(max_length=200, default='')
      pinterest = models.CharField(max_length=200, default='')
      snapchat = models.CharField(max_length=200, default='')
      likes = models.IntegerField(default=0)
      views = models.IntegerField(default=0)
  
      def average_rating(self):
          all_ratings = map(lambda x: x.rating, self.review_set.all())
          return  np.mean(all_ratings)
  
      def __str__(self):
          return self.name
  
  class Review(models.Model):
      RATING_CHOICES = (
      (1, '1'),
      (2, '2'),
      (3, '3'),
      (4, '4'),
      (5, '5'),
      (6, '6'),
      (7, '7'),
      (8, '8'),
      (9, '9'),
      (10, '10'),
      )
      model = models.ForeignKey(Model)
      pub_date = models.DateTimeField('date published')
      user_name =  models.CharField(max_length=100)
      comment = models.CharField(max_length=200)
      rating = models.IntegerField(choices=RATING_CHOICES)
  
  class Index(models.Model):
      model = models.ForeignKey(Model)
      review = models.ForeignKey(Review)
  
      class Meta:
          verbose_name = 'index'
          verbose_name_plural = 'indices'
  </code></pre>
  
  <p>Views:</p>
  
  <pre><code>from django.shortcuts import render, get_object_or_404
  from django.http import HttpResponseRedirect
  from django.core.urlresolvers import reverse
  from cloudinary.forms import cl_init_js_callbacks      
  
  from .models import Review, Model, Index
  from .forms import ReviewForm, ModelAddForm
  import datetime
  
  from django.contrib.auth.decorators import login_required
  from django.utils.decorators import method_decorator
  
  from django.template import RequestContext
  
  def index(request):
      context = RequestContext(request)
      model_list = Model.objects.order_by('-likes')
      context_dict = {'models': model_list}
      return render(request, 'reviews/index.html', context_dict, context)
  
  def review_list(request):
      latest_review_list = Review.objects.order_by('-pub_date')[:9]
      context = {'latest_review_list':latest_review_list}
      return render(request, 'reviews/review_list.html', context)
  
  def review_detail(request, review_id):
      review = get_object_or_404(Review, pk=review_id)
      return render(request, 'reviews/review_detail.html', {'review': review})
  
  def model_list(request):
      model_list = Model.objects.order_by('-name')
      context = {'model_list':model_list}
      return render(request, 'reviews/model_list.html', context)
  
  def model_detail(request, model_id):
      model = get_object_or_404(Model, pk=model_id)
      return render(request, 'reviews/model_detail.html', {'model': model})
  
  @login_required
  def add_review(request, model_id):
      if request.method == 'POST':
          form = ReviewForm(request.POST)
          if form.is_valid():
              rating = form.cleaned_data['rating']
              comment = form.cleaned_data['comment']
              user_name = form.cleaned_data['user_name']
              user_name = request.user.username
              review = Review()
              review.model = model
              review.user_name = user_name
              review.rating = rating 
              review.pub_date = datetime.datetime.now()
              review.save()
              # Always return an HttpResponseRedirect after successfully dealing
              # with POST data. This prevents data from being posted twice if a
              # user hits the Back button.
              return HttpResponseRedirect('reviews:model_detail', args=(model.id,))
  
          else:
              form = ReviewForm()
  
          return render(request, 'reviews/model_detail.html', {'form': form})
  
  @method_decorator(login_required)
  def add_model(request):
  
      if request.method == 'POST':
          form = ModelAddForm(request.POST)
          if form.is_valid():
              name = form.cleaned_data['name']
              likes = form.cleaned_data['likes']
              views = form.cleaned_data['views']
              instagram = form.cleaned_data['instagram']
              twitter = form.cleaned_data['twitter']
              snapchat = form.cleaned_data['snapchat']
              pinterest = form.cleaned_data['pinterest']
  
              return HttpResponseRedirect('reviews:model_review')
  
      else:
              form = ModelAddForm
  
      return render(request, 'reviews/add_model_detail.html', {'form': form})
  
  def user_review_list(request, username=None):
      if not username:
          username = request.user.username
      latest_review_list = Review.objects.filter(user_name=username).order_by('-pub_date')
      context = {'latest_review_list':latest_review_list, 'username':username}
      return render(request, 'reviews/user_review_list.html', context)
  
  def upload(request):
      context = dict( backend_form = PhotoForm())
  
      if request.method == 'POST':
          form = PhotoForm(request.POST, request.FILES)
          context['posted'] = form.instance
          if form.is_valid():
              form.save()
  
      return render(request, 'upload.html', context)
  </code></pre>
  
  <p>URLs:</p>
  
  <pre><code>from django.conf.urls import url
  from django.conf import settings
  from django.conf.urls.static import static
  from . import views
  
  urlpatterns = [
      url(r'^$', views.review_list, name='review_list'),
      url(r'^review/(?P&lt;review_id&gt;[0-9]+)/$', views.review_detail, name='review_detail'),
      url(r'^model/$', views.model_list, name='model_list'),
      url(r'^model/(?P&lt;model_id&gt;[0-9]+)/$', views.model_detail, name='model_detail'),
      url(r'^model/(?P&lt;model_id&gt;[0-9]+)/add_review/$', views.add_review, name='add_review'),
      url(r'^review/user/(?P&lt;username&gt;\w+)/$', views.user_review_list, name='user_review_list'),
      url(r'^review/user/$', views.user_review_list, name='user_review_list'),
      url(r'^model/add_model/$', views.add_model, name='add_model'),
      ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  </code></pre>
  
  <p>Template:</p>
  
  <pre><code>{% extends 'review/base.html' %}
  {% load static %}
  {% load cloudinary %}
  
  {% block content %}
  &lt;h1&gt;Add a Category&lt;/h1&gt;
  
          &lt;form id="category_form" method="post"&gt;
  
              {% csrf_token %}
  
              {{ form }}
  
              &lt;input type="submit" name="submit" value="Add Model" /&gt;
          &lt;/form&gt;
  
  {% endblock %}
  </code></pre>
  
  <p>Traceback:</p>
  
  <pre><code>    Environment:
  
  
      Request Method: GET
      Request URL: http://localhost:8000/reviews/model/add_model/
  
      Django Version: 1.9.1
      Python Version: 3.5.1
      Installed Applications:
      ['django.contrib.admin',
       'django.contrib.auth',
       'django.contrib.contenttypes',
       'django.contrib.sessions',
       'django.contrib.messages',
       'django.contrib.staticfiles',
       'reviews']
      Installed Middleware:
      ['django.middleware.security.SecurityMiddleware',
       'django.contrib.sessions.middleware.SessionMiddleware',
       'django.middleware.common.CommonMiddleware',
       'django.middleware.csrf.CsrfViewMiddleware',
       'django.contrib.auth.middleware.AuthenticationMiddleware',
       'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
       'django.contrib.messages.middleware.MessageMiddleware',
       'django.middleware.clickjacking.XFrameOptionsMiddleware']
  
  
  Traceback:
  
      File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\core\handlers\base.py" in get_response
        149.                     response = self.process_exception_by_middleware(e, request)
  
      File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\core\handlers\base.py" in get_response
        147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
  
      File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\utils\decorators.py" in _wrapper
        67.             return bound_func(*args, **kwargs)
  
      Exception Type: TypeError at /reviews/model/add_model/
      Exception Value: _wrapped_view() missing 1 required positional argument: 'request'
  </code></pre>
  
  <p>Edit: Added missing single quote.</p>
  
  <p>I've changed the decorator. However, I've gotten a new error. </p>
  
  <p>Traceback:</p>
  
  <pre><code>Environment:
  
  
  Request Method: GET
  Request URL: http://localhost:8000/reviews/model/add_model/
  
  Django Version: 1.9.1
  Python Version: 3.5.1
  Installed Applications:
  ['django.contrib.admin',
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',
   'reviews']
  Installed Middleware:
  ['django.middleware.security.SecurityMiddleware',
   'django.contrib.sessions.middleware.SessionMiddleware',
   'django.middleware.common.CommonMiddleware',
   'django.middleware.csrf.CsrfViewMiddleware',
   'django.contrib.auth.middleware.AuthenticationMiddleware',
   'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
   'django.contrib.messages.middleware.MessageMiddleware',
   'django.middleware.clickjacking.XFrameOptionsMiddleware']
  
  
  Template error:
  In template C:\Users\xxxxx\Desktop\Apps\thots\templates\reviews\add_model_detail.html, error at line 0
     Reverse for 'model_detail' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['reviews/model/(?P&lt;model_id&gt;[0-9]+)/$']   1 : {% extends 'reviews/base.html' %}
     2 : {% load static %}
     3 : 
     4 : {% block content %}
     5 : &lt;h1&gt;Add a Model&lt;/h1&gt;
     6 : 
     7 :         &lt;form id="add_model_form" method="post"&gt;
     8 : 
     9 :             {% csrf_token %}
     10 : 
  </code></pre>
  
  <p>Traceback:</p>
  
  <pre><code>File "C:\Users\xxxx\Anaconda3\lib\site-packages\django\core\urlresolvers.py" in reverse
    586.                 extra, resolver = resolver.namespace_dict[ns]
  
  During handling of the above exception ('thots.reviews'), another exception occurred:
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\defaulttags.py" in render
    507.                               current_app=current_app)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\core\urlresolvers.py" in reverse
    596.                                          key)
  
  During handling of the above exception ('thots.reviews' is not a registered namespace), another exception occurred:
  
  File "C:\Users\xxxxxx\Anaconda3\lib\site-packages\django\core\handlers\base.py" in get_response
    149.                     response = self.process_exception_by_middleware(e, request)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\core\handlers\base.py" in get_response
    147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
    23.                 return view_func(request, *args, **kwargs)
  
  File "C:\Users\xxxxx\Desktop\Apps\thots\reviews\views.py" in add_model
    83.   return render(request, 'reviews/add_model_detail.html', {'form': form})
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\shortcuts.py" in render
    67.             template_name, context, request=request, using=using)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\loader.py" in render_to_string
    97.         return template.render(context, request)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\backends\django.py" in render
    95.             return self.template.render(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\base.py" in render
    206.                     return self._render(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\base.py" in _render
    197.         return self.nodelist.render(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\base.py" in render
    988.                 bit = node.render_annotated(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
    955.             return self.render(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\loader_tags.py" in render
    173.         return compiled_parent._render(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\base.py" in _render
    197.         return self.nodelist.render(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\base.py" in render
    988.                 bit = node.render_annotated(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
    955.             return self.render(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\loader_tags.py" in render
    69.                 result = block.nodelist.render(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\base.py" in render
    988.                 bit = node.render_annotated(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\base.py" in render_annotated
    955.             return self.render(context)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\defaulttags.py" in render
    513.                         six.reraise(*exc_info)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\utils\six.py" in reraise
    686.         raise value
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\template\defaulttags.py" in render
    499.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\core\urlresolvers.py" in reverse
    600.     return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
  
  File "C:\Users\xxxxx\Anaconda3\lib\site-packages\django\core\urlresolvers.py" in _reverse_with_prefix
    508.                              (lookup_view_s, args, kwargs, len(patterns), patterns))
  
  Exception Type: NoReverseMatch at /reviews/model/add_model/
  Exception Value: Reverse for 'model_detail' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['reviews/model/(?P&lt;model_id&gt;[0-9]+)/$']
  </code></pre>