Django页面的ListView过滤器

时间:2015-04-30 07:38:11

标签: python django

我正在为汽车租赁客户开发Django应用程序。 在我的模型中,我有一个带有汽车属性的汽车模型(例如:乘客,港口,变速箱,类别,ecc ......)。

我已正确设置列出所有车辆的视图和模板。 现在,我需要实现一个表格来过滤汽车列表的某些特征。

我想在我的CarListView中实现一个过滤逻辑,根据查询字符串中包含的特征过滤汽车。

ex:/ cars /?ports = 1& passengers = 3

如何以优雅的Django方式实现这一点? 最好在我的urls.py中使用带有GET方法的表单或设置自定义URL

一种可能的解决方案(针对其他用户):

class CarResultsView(BreadcrumbsMixin, ListView):
    queryset = Vehicle.objects.all()
    template_name = "my_app/cars.html"

    def get_queryset(self):
        queryset = super(CarResultsView, self).get_queryset()
        search_form = VehicleFilterForm(self.request.GET)
        if search_form.is_valid():
            queryset = queryset.filter(**search_form.cleaned_data)
        return queryset

    def get_context_data(self, **kwargs):
        context = super(CarResultsView, self).get_context_data(**kwargs)
        get_params = self.request.GET
        context['form'] = VehicleFilterForm(get_params)
        return context

在您看来,可能存在一个更优雅的解决方案吗?

1 个答案:

答案 0 :(得分:2)

这是right in the docs

您将要覆盖get_queryset()方法,并修改您的网址格式以反映您将要捕获的kwargs