Django is throwing TypeError: _wrapped_view() missing 1 required positional argument: 'request'
Change @method_decorator(login_required) to @login_required
The method_decorator decorator is used to transform a function decorator into a method decorator.
@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})
@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})
user2901792
Updated on June 27, 2022Comments
-
user2901792 almost 2 years
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.
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.
Any help and explanation of what I am doing wrong will be greatly appreciated. Thank you in advance.
Here are my models:
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'
Views:
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)
URLs:
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<review_id>[0-9]+)/$', views.review_detail, name='review_detail'), url(r'^model/$', views.model_list, name='model_list'), url(r'^model/(?P<model_id>[0-9]+)/$', views.model_detail, name='model_detail'), url(r'^model/(?P<model_id>[0-9]+)/add_review/$', views.add_review, name='add_review'), url(r'^review/user/(?P<username>\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)
Template:
{% extends 'review/base.html' %} {% load static %} {% load cloudinary %} {% block content %} <h1>Add a Category</h1> <form id="category_form" method="post"> {% csrf_token %} {{ form }} <input type="submit" name="submit" value="Add Model" /> </form> {% endblock %}
Traceback:
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'
Edit: Added missing single quote.
I've changed the decorator. However, I've gotten a new error.
Traceback:
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<model_id>[0-9]+)/$'] 1 : {% extends 'reviews/base.html' %} 2 : {% load static %} 3 : 4 : {% block content %} 5 : <h1>Add a Model</h1> 6 : 7 : <form id="add_model_form" method="post"> 8 : 9 : {% csrf_token %} 10 :
Traceback:
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<model_id>[0-9]+)/$']
-
user2901792 over 8 yearsThank you for responding, Anoop. I've changed the decorator. I've gotten a new error, though. I've edit the original post.