XhensB XhensB - 15 days ago 7
Python Question

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

I got an error and I'm not sure what it means:

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


from django.db import models
from django.contrib.auth.models import User
from django.contrib import admin

class Employee(models.Model):
user = models.OneToOneField(User)
full_name = models.CharField(max_length=50)
phone_number = models.CharField(max_length=12)
company = models.CharField(max_length=100)
department = models.CharField(max_length=50)
occupation = models.CharField(max_length=50)

class Meta:
verbose_name_plural = 'employees'

admin.site.register(Employee)


views.py

from django.views.generic import TemplateView
from web_app.models import Employee

class EmployeeTemplateView(TemplateView):
model = Employee.objects.all()
template_name = 'index.html'
context_object_name = 'employee_view'


urls.py

from django.conf.urls import url, include
from web_app import routers
from django.contrib import admin
from . import views
from web_app.views import EmployeeTemplateView
admin.autodiscover()

router = routers.DefaultRouter()
router.register(r'employee', views.EmployeeTemplateView, "Employee")

urlpatterns = ['',
url(r'^$', EmployeeTemplateView.as_view({'emp' : 'employees'})),
]


What am I doing wrong?

Thank you in advance!

Answer

as_view doesn't take positional arguments, it takes keyword arguments.

EmployeeTemplateView.as_view(emp='employees')