首页 > 解决方案 > 基于 Django 分类的视图 __init__() 缺少 1 个必需的位置参数

问题描述

我正在尝试在 Django 中使用基于类的视图!

我的 urls.py:

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

我的观点.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,
        })

我收到此错误:

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

标签: djangodjango-viewsdjango-class-based-views

解决方案


您需要正确使用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__方法即可从请求中接收参数。


推荐阅读