DJANGO 如何用ListView过滤查询集?

问题描述 投票:0回答:1

我正在用Django搭建一个网站,我的问题是:我有一个页面,主页,目标是显示数据库中所有的Plat对象(Plat是数据库中的一个模型)。我想要的是在列表旁边有一个过滤表,可以根据不同的属性过滤对象。例如,我们可以过滤价格大于10欧元的对象,或者过滤某项属性小于5的对象,或者同时过滤这两项。

这里是我的文件的相关部分。

views.py

class home(ListView):
    model = Plat
    context_object_name = "plats"
    template_name = "actualites/home.html"
    paginate_by = 9

urls.py

urlpatterns = [
    path('home', views.home.as_view(), name = 'home'),
]

home.html文件是用bootstrap制作的,而且非常大,所以我不会显示它,因为我认为它没什么用。解决我的问题的方法可能是在url中加入参数。path('home/<int:price>', views.home.as_view(), name = 'home'), 并覆盖主视图中的get_queryset。def get_queryset(self): return Plat.objects.filter(prix=self.kwargs['price'])问题是可以对很多属性进行过滤,这样我的url就会非常大,如 home/<int:attr1_min_value>/<int:attr1_max_value>/<int:attr2_min_value>/...... 此外,我必须给参数设置默认值,比如attr2_min_value默认为0,这样我就可以只对attr1进行过滤。但我认为在Django中是不可能的。而且我也不知道如何在模板中的过滤按钮和url中的参数之间建立联系。

正确的操作方法是什么?

django django-templates django-views django-queryset django-urls
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.