Error : Django 2.X Error: __init__() takes 1 positional argument but 2 were given
It took me significant amount of time to fix this issue. For future reference and possible-need of someone I would like to share the root cause and solution;
When you look at the console output you will the see traceback of the error
like below:
<span>Traceback</span> <span>(</span><span>most</span> <span>recent</span> <span>call</span> <span>last</span><span>):</span><span>File</span> <span>"/home/user/projects/django-cbv/.venv/lib/python3.6/site-packages/django/core/handlers/exception.py"</span><span>,</span> <span>line</span> <span>35</span><span>,</span> <span>in</span> <span>inner</span><span>response</span> <span>=</span> <span>get_response</span><span>(</span><span>request</span><span>)</span><span>File</span> <span>"/home/user/projects/django-cbv/.venv/lib/python3.6/site-packages/django/core/handlers/base.py"</span><span>,</span> <span>line</span> <span>128</span><span>,</span> <span>in</span> <span>_get_response</span><span>response</span> <span>=</span> <span>self</span><span>.</span><span>process_exception_by_middleware</span><span>(</span><span>e</span><span>,</span> <span>request</span><span>)</span><span>File</span> <span>"/home/user/projects/django-cbv/.venv/lib/python3.6/site-packages/django/core/handlers/base.py"</span><span>,</span> <span>line</span> <span>126</span><span>,</span> <span>in</span> <span>_get_response</span><span>response</span> <span>=</span> <span>wrapped_callback</span> <span>(</span><span>request</span><span>,</span> <span>*</span><span>callback_args</span><span>,</span> <span>**</span><span>callback_kwargs</span><span>)</span><span>TypeError</span><span>:</span> <span>__init__</span><span>()</span> <span>take</span> <span>s</span> <span>1</span> <span>positional</span> <span>argument</span> <span>but</span> <span>2</span> <span>were</span> <span>given</span><span>Traceback</span> <span>(</span><span>most</span> <span>recent</span> <span>call</span> <span>last</span><span>):</span> <span>File</span> <span>"/home/user/projects/django-cbv/.venv/lib/python3.6/site-packages/django/core/handlers/exception.py"</span><span>,</span> <span>line</span> <span>35</span><span>,</span> <span>in</span> <span>inner</span> <span>response</span> <span>=</span> <span>get_response</span><span>(</span><span>request</span><span>)</span> <span>File</span> <span>"/home/user/projects/django-cbv/.venv/lib/python3.6/site-packages/django/core/handlers/base.py"</span><span>,</span> <span>line</span> <span>128</span><span>,</span> <span>in</span> <span>_get_response</span> <span>response</span> <span>=</span> <span>self</span><span>.</span><span>process_exception_by_middleware</span><span>(</span><span>e</span><span>,</span> <span>request</span><span>)</span> <span>File</span> <span>"/home/user/projects/django-cbv/.venv/lib/python3.6/site-packages/django/core/handlers/base.py"</span><span>,</span> <span>line</span> <span>126</span><span>,</span> <span>in</span> <span>_get_response</span> <span>response</span> <span>=</span> <span>wrapped_callback</span> <span>(</span><span>request</span><span>,</span> <span>*</span><span>callback_args</span><span>,</span> <span>**</span><span>callback_kwargs</span><span>)</span> <span>TypeError</span><span>:</span> <span>__init__</span><span>()</span> <span>take</span> <span>s</span> <span>1</span> <span>positional</span> <span>argument</span> <span>but</span> <span>2</span> <span>were</span> <span>given</span>Traceback (most recent call last): File "/home/user/projects/django-cbv/.venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner response = get_response(request) File "/home/user/projects/django-cbv/.venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response response = self.process_exception_by_middleware(e, request) File "/home/user/projects/django-cbv/.venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response response = wrapped_callback (request, *callback_args, **callback_kwargs) TypeError: __init__() take s 1 positional argument but 2 were given
Enter fullscreen mode Exit fullscreen mode
It means you need to use as_view()
at the end of class-based views when declaring in the urls:
<span># src/app/urls.py </span><span>from</span> <span>django.urls</span> <span>import</span> <span>path</span><span>from</span> <span>.</span> <span>import</span> <span>views</span><span>app_name</span> <span>=</span> <span>"app"</span><span>urlpatterns</span> <span>=</span> <span>[</span><span>path</span><span>(</span><span>'home/'</span><span>,</span> <span>views</span><span>.</span><span>BookCreate</span><span>.</span><span>as_view</span><span>(),</span> <span>name</span><span>=</span><span>'homepage'</span><span>),</span><span>]</span><span># src/app/urls.py </span><span>from</span> <span>django.urls</span> <span>import</span> <span>path</span> <span>from</span> <span>.</span> <span>import</span> <span>views</span> <span>app_name</span> <span>=</span> <span>"app"</span> <span>urlpatterns</span> <span>=</span> <span>[</span> <span>path</span><span>(</span><span>'home/'</span><span>,</span> <span>views</span><span>.</span><span>BookCreate</span><span>.</span><span>as_view</span><span>(),</span> <span>name</span><span>=</span><span>'homepage'</span><span>),</span> <span>]</span># src/app/urls.py from django.urls import path from . import views app_name = "app" urlpatterns = [ path('home/', views.BookCreate.as_view(), name='homepage'), ]
Enter fullscreen mode Exit fullscreen mode
The problem is:
<span>urlpatterns</span> <span>=</span> <span>[</span><span>path</span><span>(</span><span>'home/'</span><span>,</span> <span>views</span><span>.</span><span>BookCreate</span><span>,</span> <span>name</span><span>=</span><span>'homepage'</span><span>),</span><span>]</span><span>urlpatterns</span> <span>=</span> <span>[</span> <span>path</span><span>(</span><span>'home/'</span><span>,</span> <span>views</span><span>.</span><span>BookCreate</span><span>,</span> <span>name</span><span>=</span><span>'homepage'</span><span>),</span> <span>]</span>urlpatterns = [ path('home/', views.BookCreate, name='homepage'), ]
Enter fullscreen mode Exit fullscreen mode
It does not matter, it may be any CBV
but for additional detail you can look at the view
:
<span># src/app/views.py </span><span>from</span> <span>django.views.generic.edit</span> <span>import</span> <span>CreateView</span><span>from</span> <span>.models</span> <span>import</span> <span>Book</span><span>class</span> <span>BookCreate</span><span>(</span><span>CreateView</span><span>):</span><span>model</span> <span>=</span> <span>Book</span><span>fields</span> <span>=</span> <span>(</span><span>'name'</span><span>,</span> <span>'isbn'</span><span>,</span> <span>'author'</span><span>)</span><span>template_name</span> <span>=</span> <span>"app/book_form.html"</span><span># src/app/views.py </span><span>from</span> <span>django.views.generic.edit</span> <span>import</span> <span>CreateView</span> <span>from</span> <span>.models</span> <span>import</span> <span>Book</span> <span>class</span> <span>BookCreate</span><span>(</span><span>CreateView</span><span>):</span> <span>model</span> <span>=</span> <span>Book</span> <span>fields</span> <span>=</span> <span>(</span><span>'name'</span><span>,</span> <span>'isbn'</span><span>,</span> <span>'author'</span><span>)</span> <span>template_name</span> <span>=</span> <span>"app/book_form.html"</span># src/app/views.py from django.views.generic.edit import CreateView from .models import Book class BookCreate(CreateView): model = Book fields = ('name', 'isbn', 'author') template_name = "app/book_form.html"
Enter fullscreen mode Exit fullscreen mode
OK, All done!
暂无评论内容