在Django中,一次搜索并按搜索框和类别过滤?

时间:2010-08-03 10:06:25

标签: python django search filter categories

我想知道你是否可以帮助我。

我有一个将在一个页面上显示的数据列表。有一个简单的搜索框,一个类别列表和一个可用于过滤数据列表的标签列表。我正在尝试从头开始构建它(因此它不需要JavaScript)但最终它将提交搜索条件并使用Ajax返回一个新列表。

所以我的数据库中有一个类别列表('large','small'等),我的数据库中有一个标签列表('wooden','brass')。标签用于过滤掉类别中的更多内容。然后我有一个搜索框。理想情况下,我希望用户有效地勾选他们想要的类别,勾选他们想要的标签并可能搜索关键字,然后提交所有数据以便查询,并且可以返回过滤后的数据的新列表

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

拜托,任何帮助都会很棒。

1 个答案:

答案 0 :(得分: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. 您的管理页面非常接近您想要的,您可以编写自己的自定义视图。


  5.   

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