2012-01-07 63 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