2010-08-03 76 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