2010-08-03 93 views
1

我想知道你能否帮助我。在Django中,通过搜索框和类别一次搜索和过滤?

我有一个数据列表将显示在一个页面上。有一个简单的搜索框,一个类别列表和一个标签列表,可以用来过滤数据列表。我试图从头开始构建它(所以它不需要JavaScript),但最终它会提交搜索条件并使用Ajax返回一个新列表。所以我有我的数据库中的类别列表('大','小'等),我有我的数据库中的标签列表('木','黄铜')。标签用于过滤更多类别中的内容。然后我有一个搜索框。理想情况下,我希望用户能够有效地勾选他们想要的类别,勾选他们想要的标签,并且可能会搜索关键字,然后提交所有数据以便查询并可以返回过滤数据的新列表。

我不是一个Django的专家,我被困在如何以及在哪里做...这是什么Django的方式吐出类别作为复选框列表,标签作为复选框列表和带提交按钮的搜索框......提交后,我可以获取所有数据并对数据库进行必要的查询?我不太明白我该怎么做......我一直在看Django Docs和Django Book几天,我做事情的方式似乎没有列出。

请任何帮助都是太棒了。

回答

1

吐出的类别为复选框列表,

标签为复选框列表和一个提交按钮

查寻

这是一个<form>在你的HTML页面中。它可能与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 
+0

lott感谢您的回复。我想我需要手动完成此操作。我已经在管理员中正确设置了所有的东西......这是用户方面的问题。因为我使用的是复选框(所以可以选择多个类别或标签),每个复选框都有不同的名称('category_option_1','category_option_2'等),这些都是我被困在视图部分的地方......怎么做我读过这些?我不能只是把request.POST ['category_option_n']?我需要对页面上的每个复选框进行POST检查,这看起来不太好。 – littlejim84 2010-08-03 10:22:45

+0

@ littlejim84:“这就是我被困在视图部分的地方”。然后实际上在你的问题中说这个。不希望我们猜测这是你卡住的地方。 – 2010-08-03 12:35:21

+0

洛特对不起,看起来我冒犯了你。在你给出你的答案后,我遵循了这一点,并意识到我被卡在了我评论的那一点上。你的回答有助于从头开始,让球滚动,然后我需要进一步细化。谢谢。 – littlejim84 2010-08-03 12:59:16