Python – TypeError: __init__() takes 1 positional argument but 2 were given

djangopython

I am develop a simple rest api using Django 1.10
When I run my server and call app url I get an error:

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

GET /demo/ HTTP/1.1" 500 64736

Traceback

Environment:
Request Method: GET
Request URL: http://localhost:8000/demo/

Django Version: 1.10.4
Python Version: 3.5.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'mydemoapp',
 'rest_framework']
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 "/home/aqib/DjangoProject/mydemoenv/lib/python3.5/site-    packages/django/core/handlers/exception.py" in inner
    39. response = get_response(request)

    File "/home/aqib/DjangoProject/mydemoenv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 
    187. response = self.process_exception_by_middleware(e, request)

    File "/home/aqib/DjangoProject/mydemoenv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
    185. response = wrapped_callback(request, *callback_args, **callback_kwargs)

    Exception Type: TypeError at /demo/
    Exception Value: __init__() takes 1 positional argument but 2 were given

models.py

from django.db import models

class ProfileModel(models.Model):
    name = models.CharField(max_length=30, blank=False, default='Your Name')
    address = models.CharField(max_length=100, blank=True)
    contact = models.IntegerField()

    def __str__(self):
        return '%s %s' % (self.name, self.address)

views.py

from django.shortcuts import render
from rest_framework import viewsets
from mydemoapp.models import ProfileModel
from .serializers import ProfileSerializer

class ProfileView(viewsets.ModelViewSet):
    profile = ProfileModel.objects.all()
    serializer_class = ProfileSerializer

serializers.py

from .models import ProfileModel
from rest_framework import serializers

class ProfileSerializer(serializers.ModelSerializer):

    class Meta:
        model = ProfileModel
        fields = ('name', 'address', 'contact')

urls.py (Application Url)

from django.conf.urls import url
from mydemoapp import views

urlpatterns = [
url(r'^$', views.ProfileView),
]

urls.py (project url)

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^demo/', include('mydemoapp.urls')),
]

Best Answer

This very silly mistake I do too often. This is because of the urls.py(Application). Always remember to call the .as_view() method

Wrong

urls.py

from django.conf.urls import url
from mydemoapp import views

urlpatterns = [
url(r'^$', views.ProfileView),
]

Correct

urls.py

from django.conf.urls import url
from mydemoapp import views

urlpatterns = [
url(r'^$', views.ProfileView.as_view()),
]
Related Topic