Django Классифицированное представление __init __ () отсутствует 1 обязательный позиционный аргумент - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь использовать представления на основе классов в Django!

my urls.py:

path('pie-chart/', views.pie_chart, name='pie_chart.html'),

my view.py

class pie_chart(View):
    def __init__(self, labels, data):
        self.labels = labels
        self.data = data


    def active_sessions(self, request):
        self.labels = []
        self.data = []
        queryset = Employees.objects.values('department__name').annotate(total_session=Count('employeeconnection__employeesession'))
        for item in queryset: 
            self.labels.append(item['department__name'])
            self.data.append(item['total_session'])

        return render(request, 'pie_chart.html', {
            'labels': self.labels,
            'data': self.data,
        })

I получаю эту ошибку:

__init__() missing 1 required positional argument: 'data'

Ответы [ 2 ]

1 голос
/ 27 января 2020

Вам необходимо правильно использовать View методы - установить метод обработчика для запросов GET:

class PieChart(View):

    def get(self, request, *args, **kwargs):
        labels = []
        data = []
        queryset = employees.objects.values('department__name').annotate(total_session=Count('employeeconnection__employeesession'))
        for item in queryset: 
            labels.append(item['department__name'])
            data.append(item['total_session'])
        return render(request, 'pie_chart.html', {
                'labels': labels,
                'data': data,
            })

Затем вызвать as_view() в urls.py:

path('pie-chart/', views.PieChart.as_view(), name='pie_chart.html'),

И вам не нужно переопределять метод представления __init__ для получения параметров из запроса.

0 голосов
/ 27 января 2020

При использовании представлений на основе классов вы должны вызывать as_view метод класса при регистрации этого представления в URL, а не просто передавать его в URL:

path('pie-chart/', views.pie_chart.as_view(), name='pie_chart.html'),
...