Django Class-Based View – TypeError

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!

原文链接:Django Class-Based View – TypeError

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
Love begins with a smile, grows with a kiss and ends with a tear.
爱,起于微笑,浓于亲吻,逝于泪水
评论 抢沙发

请登录后发表评论

    暂无评论内容