在Django中,如何通过搜索框和分类一次性搜索和过滤?

1 投票
1 回答
2877 浏览
提问于 2025-04-16 02:14

我想请你帮个忙。

我有一份数据列表,打算在一个页面上展示。页面上有一个简单的搜索框,还有一个分类列表和一个标签列表,用户可以用这些来过滤数据。我想从头开始做这个功能(所以不需要JavaScript),但最终会提交搜索条件,然后用Ajax返回一个新的数据列表。

我的数据库里有一些分类(比如“大的”、“小的”等),还有一些标签(比如“木制的”、“黄铜的”)。标签是用来进一步过滤分类中的内容的。然后我还有一个搜索框。理想情况下,我希望用户能够选择他们想要的分类,勾选他们想要的标签,可能还可以输入一些关键词,然后提交这些数据,这样就可以查询出一个新的过滤后的数据列表。

我对Django不是很熟悉,现在不知道该怎么做……我想知道在Django中,如何把分类显示成复选框列表,把标签也显示成复选框列表,还有搜索框和提交按钮……当用户提交后,我可以把这些数据拿去查询数据库?我不太明白该怎么实现……我这几天在看Django的文档和书籍,但我做的事情似乎没有被提到。

如果能得到任何帮助,那就太好了。

1 个回答

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. ... )

我现在做的事情似乎没有在教程里列出来。

你已经超出了教程的范围。

该怎么办呢?

  1. 把整个教程都做一遍。一步不漏。虽然看起来这并不能解决你的问题,但你必须把整个教程都做完。

  2. 设计你的模型。你在问题中没有提到模型。这是最重要、最基本的事情。

  3. 为这个模型创建默认的管理界面。让默认的管理界面正常工作,并实现你想要的功能。它有很好的搜索、类别和标签过滤功能。

    为了让默认的管理界面正常工作,你需要设计相对复杂的模型和表单特性。你可能还需要为你的模型添加方法函数、选项项和其他功能。

  4. 在你把管理页面调整到接近你想要的样子后,你可以写自己定制的视图。


每个复选框都有不同的名字('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

撰写回答