Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django 2.1.3 Error: __init__() takes 1 positional argument but 2 were given

Tags:

I am trying to develop a website with Django 2.1.3 and python 3.7.1 When I go to the homepage I get this error:

TypeError at / __init__() takes 1 positional argument but 2 were given 

Here are some details about the code I write:

Traceback

    Environment:       Request Method: GET     Request URL: http://127.0.0.1:8000/          Django Version: 2.1.3     Python Version: 3.7.1     Installed Applications:     ['django.contrib.admin',      'django.contrib.auth',      'django.contrib.contenttypes',      'django.contrib.sessions',      'django.contrib.messages',      'django.contrib.staticfiles',      'core',      'crispy_forms']     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.messages.middleware.MessageMiddleware',      'django.middleware.clickjacking.XFrameOptionsMiddleware']                    Traceback:          File "C:\Users\andre\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py" in inner       34.             response = get_response(request)          File "C:\Users\andre\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response       126.                 response = self.process_exception_by_middleware(e, request)          File "C:\Users\andre\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response       124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)          File "C:\Users\andre\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view       21.                 return view_func(request, *args, **kwargs)          Exception Type: TypeError at /     Exception Value: __init__() takes 1 positional argument but 2 were given 

core/models.py

This is just one table on DB:

from django.db import models   class Evento(models.Model):     titolo_evento = models.CharField(max_length=30)     data_inizio = models.DateTimeField()     data_fine = models.DateTimeField()      def __str__(self):         return self.titolo_evento      class Meta:         verbose_name = 'Evento'         verbose_name_plural = 'Eventi' 

core/views.py

Here I want to see the DB "Eventi" on the homepage only if the user is authenticated, i think the mistake is here, but i don't know where:

from django.contrib.auth.decorators import login_required from .models import Evento from django.views.generic.list import ListView   @login_required class HomeView(ListView):     queryset = Evento.objects.all()     template_name = 'core/homepage.html'     context_object_name = 'lista_eventi' 

core/urls.py

from django.urls import path from . import views   urlpatterns = [     path('', views.HomeView, name='homepage'),     ] 

urls.py(project)

  from django.contrib import admin     from django.urls import path, include          urlpatterns = [         path('admin/', admin.site.urls),         path('', include('core.urls')),         path('accounts/', include('django.contrib.auth.urls'))     ] 
like image 652
Andrea Gero Avatar asked Dec 01 '18 15:12

Andrea Gero


People also ask

Where () takes 2 positional arguments but 3 were given?

The Python "TypeError: takes 2 positional argument but 3 were given" occurs for multiple reasons: Forgetting to specify the self argument in a class method. Forgetting to specify a third argument in a function's definition. Passing three arguments to a function that only takes two.

What is positional argument in Django?

Positional arguments are arguments that can be called by their position in the function call. Keyword arguments are arguments that can be called by their name. Required arguments are arguments that must passed to the function. Optional arguments are arguments that can be not passed to the function.


1 Answers

You need use as_view() at the end of class based views when declaring in the urls:

path('', views.HomeView.as_view(), name='homepage'), 

Also, when using login_required decorator, you need to use it on dispatch method of CBV:

from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator  class HomeView(ListView):      @method_decorator(login_required)     def dispatch(self, *args, **kwargs):         return super(HomeView, self).dispatch(*args, **kwargs) 
like image 111
ruddra Avatar answered Sep 22 '22 13:09

ruddra