我正在創建簡單的搜索引擎,因此我在頁面頂部有一個輸入文本字段,旁邊有「搜索」按鈕。這都是一種形式,並且「產生」例如/q=search%20query
。從django中收集少量表格的信息
在側邊欄我有另一種形式的過濾器面板,可以說from
,to
。我想有可能創建鏈接,如/q=search%20query&from=20&to=50
。我想知道第一種形式的按鈕應該如何從第二種形式收集信息。
我在某處看到有類似formset的東西,但是我沒有找到可以用於類似的東西的信息。
我正在創建簡單的搜索引擎,因此我在頁面頂部有一個輸入文本字段,旁邊有「搜索」按鈕。這都是一種形式,並且「產生」例如/q=search%20query
。從django中收集少量表格的信息
在側邊欄我有另一種形式的過濾器面板,可以說from
,to
。我想有可能創建鏈接,如/q=search%20query&from=20&to=50
。我想知道第一種形式的按鈕應該如何從第二種形式收集信息。
我在某處看到有類似formset的東西,但是我沒有找到可以用於類似的東西的信息。
我認爲這將是最容易解決的做一個表單,其中包括搜索詞和任何過濾器;你可以將表單元素放在任何你想要的地方。
你的形式必須是這樣的:
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)
我只是想出了一個主意,我可以創建第一種形式是附加隱藏字段,可以通過JavaScript與第二種形式的字段同步。這會產生小的冗餘,但似乎很容易實現。
這是一個好主意嗎?
當然,這是行得通的。如果你定義了一個第三種形式,它將繼承所有的字段,這兩種形式都是子類的,它會更清晰(也更不容易中斷)。 – Basti
我的兩個表格都在不同的文件中。爲了做你所建議的我必須合併它們,並創建一個包含很多其他html元素的巨大表單。 – noisy
您可以將兩個表單放置在您的模板中,只要它們位於相同的'