Get_queryset()缺少1个必需的位置参数:“ request”

时间:2018-07-04 08:28:07

标签: python django

我有一个这样的列表视图:

:=

当我转到网址时,出现此错误:

class IncidentListView(generic.ListView):
    model = Incident
    paginate_by = 3


    def get_queryset(self,request):
        order_by = request.GET.get('order_by', 'defaultOrderField')
        return model.objects.all().order_by(order_by)  

我在做什么错?我要这样做,所以您可以单击创建新列表视图的排序链接,但不确定如何处理。

作为参考,我遵循了建议here

2 个答案:

答案 0 :(得分:3)

像这样尝试:

class IncidentListView(generic.ListView):
    model = Incident
    paginate_by = 3


    def get_queryset(self):
        order_by = self.request.GET.get('order_by', 'defaultOrderField')
        return model.objects.all().order_by(order_by) 

答案 1 :(得分:1)

在基于类的视图中,您始终可以通过self.request引用请求。但是,为了使所有其他魔术(如分页)正常工作,您不应该完全替换get_queryset方法。最好改写专用的钩子get_ordering。它应该返回一个字符串或字符串元组,该字符串或字符串元组将被模型的查询集的order_by接受:

class IncidentListView(generic.ListView):
    model = Incident
    paginate_by = 3

    def get_ordering(self):
        return self.request.GET.get('order_by', 'defaultOrderField')