12 votes

TypeError : as_view() prend 1 argument positionnel mais 2 ont été donnés

J'ai eu une erreur et je ne suis pas sûr de ce qu'elle signifie :

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)

vues.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'})),
               ]

Qu'est-ce que je fais de mal ?

Merci d'avance !

67voto

felix Points 121

Assurez-vous que vous mettez "as_view()" comme tel. Pas "as_view". J'ai fait une grosse erreur

13voto

Daniel Roseman Points 199743

as_view ne prend pas d'arguments positionnels, mais des arguments mots-clés.

EmployeeTemplateView.as_view(emp='employees')

1voto

Hybrid Points 1947

Puisqu'il semble que vous essayez simplement de faire passer le fichier employees de la vue au modèle, vous pouvez l'envoyer de cette façon :

vues.py

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

class EmployeeListView(ListView):
    model = Employee
    template_name = 'index.html'
    context_object_name = 'employees'

urls.py

urlpatterns = [
               url(r'^$', EmployeeListView.as_view(), name="employees"),
               ]

Vous pouvez alors utiliser le context_object_name dans le modèle de la manière suivante :

index.html

<div>{% for employee in employees %} {{ employee }} {% endfor %}</div>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X