在Django中,如何通过搜索框和分类一次性搜索和过滤?
我想请你帮个忙。
我有一份数据列表,打算在一个页面上展示。页面上有一个简单的搜索框,还有一个分类列表和一个标签列表,用户可以用这些来过滤数据。我想从头开始做这个功能(所以不需要JavaScript),但最终会提交搜索条件,然后用Ajax返回一个新的数据列表。
我的数据库里有一些分类(比如“大的”、“小的”等),还有一些标签(比如“木制的”、“黄铜的”)。标签是用来进一步过滤分类中的内容的。然后我还有一个搜索框。理想情况下,我希望用户能够选择他们想要的分类,勾选他们想要的标签,可能还可以输入一些关键词,然后提交这些数据,这样就可以查询出一个新的过滤后的数据列表。
我对Django不是很熟悉,现在不知道该怎么做……我想知道在Django中,如何把分类显示成复选框列表,把标签也显示成复选框列表,还有搜索框和提交按钮……当用户提交后,我可以把这些数据拿去查询数据库?我不太明白该怎么实现……我这几天在看Django的文档和书籍,但我做的事情似乎没有被提到。
如果能得到任何帮助,那就太好了。
1 个回答
把类别显示成复选框列表,
把标签显示成复选框列表,还有
搜索框和提交按钮……
这就是你HTML页面中的一个<form>
。它可能和Django模型不太匹配。这是一个基本上手动创建的独特表单。
我可以把这些数据拿去对数据库进行必要的查询吗?
这就是一个视图函数。
你可能会有这样的东西。
objects= SomeModel.objects
if request.GET ... has categories ...
objects = objects.filter( ... categories ... )
if request.GET ... has tags ...
objects = objects.filter( ... tags ... )
if request.GET ... has search ...
objects = objects.filter( something__contains( search ) )
return render_to_response( ... etc. ... )
我现在做的事情似乎没有在教程里列出来。
你已经超出了教程的范围。
该怎么办呢?
把整个教程都做一遍。一步不漏。虽然看起来这并不能解决你的问题,但你必须把整个教程都做完。
设计你的模型。你在问题中没有提到模型。这是最重要、最基本的事情。
为这个模型创建默认的管理界面。让默认的管理界面正常工作,并实现你想要的功能。它有很好的搜索、类别和标签过滤功能。
为了让默认的管理界面正常工作,你需要设计相对复杂的模型和表单特性。你可能还需要为你的模型添加方法函数、选项项和其他功能。
在你把管理页面调整到接近你想要的样子后,你可以写自己定制的视图。
每个复选框都有不同的名字('category_option_1','category_option_2',等等)……我该怎么读取这些?我不能直接用 request.POST['category_option_n'] 吗?
真的?那你为什么不在问题里说明呢?
你是在问这个吗?
for k in range(1024):
name = 'category_option_{0}'.format(k)
# Use request.POST.get(name,None) to build a `Q` object