我正在用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中的参数之间建立联系。
正确的操作方法是什么?