2013-07-15 56 views
3

我正在創建簡單的搜索引擎,因此我在頁面頂部有一個輸入文本字段,旁邊有「搜索」按鈕。這都是一種形式,並且「產生」例如/q=search%20query從django中收集少量表格的信息

在側邊欄我有另一種形式的過濾器面板,可以說from,to。我想有可能創建鏈接,如/q=search%20query&from=20&to=50。我想知道第一種形式的按鈕應該如何從第二種形式收集信息。

我在某處看到有類似formset的東西,但是我沒有找到可以用於類似的東西的信息。

回答

0

我認爲這將是最容易解決的做一個表單,其中包括搜索詞和任何過濾器;你可以將表單元素放在任何你想要的地方。

你的形式必須是這樣的:

from django import forms 

    class MySearchForm(forms.Form): 
     FILTERS = (("lt20", "Less than 20"), 
        ("20to50", "Twenty to fifty"), 
       ) 
     term = forms.CharField() 
     filters = forms.MultipleChoiceField(widget = CheckBoxSelectMultiple, choices = FILTERS) 

然後,你將不得不手動顯示形式,所以你可以把它分解了,但是你想在模板中。換句話說,您不必使用像{{form.as_p}}這樣的過濾器,而必須執行{{form.term}}{{form.filters}}

你也可以在模型中定義的過濾器,這樣就可以更容易地改變他們,加給他們,等,ST:

# in models.py 
class = Filters(models.Model): 
    name = models.CharField(max_length=20) 

# in your form definition, 
from your_app_name.models import Filters 

class MySearchForm(forms.Form): 
    term = forms.CharField() 
    filters = forms.ModelChoiceField(queryset = Filters.objects.all(), widget = CheckBoxSelectMultiple) 
+0

我的兩個表格都在不同的文件中。爲了做你所建議的我必須合併它們,並創建一個包含很多其他html元素的巨大表單。 – noisy

+0

您可以將兩個表單放置在您的模板中,只要它們位於相同的'

'標記中,方法是向它們添加前綴。請參閱[文檔](https://docs.djangoproject.com/en/1.3/ref/forms/api/#prefixes-for-forms)。另一個選擇是創建一個第三個表單,它們都是子類的,就像這樣:class MyBigForm(Form1,Form2):' – Basti

0

我只是想出了一個主意,我可以創建第一種形式是附加隱藏字段,可以通過JavaScript與第二種形式的字段同步。這會產生小的冗餘,但似乎很容易實現。

這是一個好主意嗎?

+0

當然,這是行得通的。如果你定義了一個第三種形式,它將繼承所有的字段,這兩種形式都是子類的,它會更清晰(也更不容易中斷)。 – Basti