2012-01-07 66 views
0

如何创建一个像这样过滤模型的查询?Django Cross过滤搜索?

我的模式是:

class test(models.Model): 
    name = models.CharField(max_length=50) 
    status = models.CharField(max_length=50) 
    other = models.CharField(max_length=50) 

我想这样的替代或者我通过筛选和查询。我试图改变|到&但它不起作用。为了使它更复杂,如果我对模板过滤器的形式,使得:

results = test.objects.filter(name=name1,status=status1,other=other1) 

Filter By Name: DropDownList of Names 
Filter By Status: DropDownList of Statuses 
Filter By Other: DropDownList of Others 

如果我选择名称1,STATUS1和其他1从下拉框中应该显示的结果

这里是views.py我当前查询:

def search(request): 
    query = request.GET.get('q', '') 
    if query: 
     qset = (
      Q(name__icontains=query) | 
      Q(status__icontains=query) | 
      Q(other__icontains=query) 
     ) 
     results = test.objects.filter(qset).distinct() 
    else: 
     results = [] 
    return render_to_response("test/search.html", { 
     "results": results, 
     "query": query 
    }) 

这个目前只搜索名称,状态或其他。如果我更改|到&它搜索它们的全部,但是当我显示结果时没有显示,因为表单下拉框中的查询处理没有链接。如何链接它们?如何为特定领域的下拉菜单提供全部选项?

我希望我已经说清楚了。谢谢。

+0

那么,你的查询是什么? – 2012-01-07 18:23:35

+0

而且,'category'与你的模型有关吗? – danihp 2012-01-07 21:08:49

回答

2

我建议你看看django-filters申请。它可以通过搜索/筛选查询使自动化与形式的下拉菜单,使查询集所有常规:

Django的过滤器是用于让用户 过滤查询集动态可重复使用的Django应用程序。它需要Python 2.4或更高版本。有关 的使用和安装说明,请参阅docs目录。

Django过滤器可用于生成类似于 Django admin的list_filter接口的接口。它有一个非常类似于Django的ModelForms的API 。例如,如果你有一个产品型号 你可以有一个filterset它与代码::

import django_filters 

class ProductFilterSet(django_filters.FilterSet): 
    class Meta: 
     model = Product 
     fields = ['name', 'price', 'manufacturer'] 

,然后在视图中,你可以做::

def product_list(request): 
    filterset = ProductFilterSet(request.GET or None) 
    return render_to_response('product/product_list.html', 
     {'filterset': filterset}) 

请参阅docs目录更多信息。

+0

非常感谢,就是这样 – Neeran 2012-01-09 10:09:13