Django 2.1.3 Ошибка: __init __ () принимает 1 позиционный аргумент, но 2 были даны - PullRequest
0 голосов
/ 01 декабря 2018

я пытаюсь разработать веб-сайт с Django 2.1.3 и python 3.7.1. Когда я захожу на домашнюю страницу, я получаю эту ошибку:

TypeError at / __init __ () принимает 1 позиционный аргументно 2 были даны

Вот некоторые подробности о коде, который я пишу:

Trceback

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/

Django Version: 2.1.3
Python Version: 3.7.1
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'core',
 'crispy_forms']
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 "C:\Users\andre\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\andre\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  126.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\andre\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\andre\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
  21.                 return view_func(request, *args, **kwargs)

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

core / models.py

Thisэто всего лишь одна таблица в БД:

from django.db import models


class Evento(models.Model):
    titolo_evento = models.CharField(max_length=30)
    data_inizio = models.DateTimeField()
    data_fine = models.DateTimeField()

    def __str__(self):
        return self.titolo_evento

    class Meta:
        verbose_name = 'Evento'
        verbose_name_plural = 'Eventi'

core / views.py

Здесь я хочу видеть БД "Eventi" на домашней странице, только если пользователь аутентифицирован, я думаю, чтоошибка здесь, но я не знаю где:

from django.contrib.auth.decorators import login_required
from .models import Evento
from django.views.generic.list import ListView


@login_required
class HomeView(ListView):
    queryset = Evento.objects.all()
    template_name = 'core/homepage.html'
    context_object_name = 'lista_eventi'

core / urls.py

from django.urls import path
from . import views


urlpatterns = [
    path('', views.HomeView, name='homepage'),
    ]

urls.py (проект)

  from django.contrib import admin
    from django.urls import path, include

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('core.urls')),
        path('accounts/', include('django.contrib.auth.urls'))
    ]

1 Ответ

0 голосов
/ 01 декабря 2018

Вам необходимо использовать as_view () в конце представлений на основе классов при объявлении в URL:

path('', views.HomeView.as_view(), name='homepage'),

Кроме того, при использовании декоратора login_required необходимо использоватьспособ доставки CBV:

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

class HomeView(ListView):

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(HomeView, self).dispatch(*args, **kwargs)
...