我正在创建简单的搜索引擎,所以我在页面顶部有一个输入文本字段,旁边有一个“搜索”按钮。这都是一种形式,例如“生产” /q=search%20query
。
在侧边栏中,我有另一个带有过滤器的表单的面板,比如说from
, to
。我希望有可能创建像/q=search%20query&from=20&to=50
. 我想知道第一种形式的按钮应该如何从第二种形式收集信息。
我在某处读到有类似表单集的东西,但是我没有找到可以将它们用于类似的东西的信息。
我正在创建简单的搜索引擎,所以我在页面顶部有一个输入文本字段,旁边有一个“搜索”按钮。这都是一种形式,例如“生产” /q=search%20query
。
在侧边栏中,我有另一个带有过滤器的表单的面板,比如说from
, to
。我希望有可能创建像/q=search%20query&from=20&to=50
. 我想知道第一种形式的按钮应该如何从第二种形式收集信息。
我在某处读到有类似表单集的东西,但是我没有找到可以将它们用于类似的东西的信息。
我认为通过制作一个包含搜索词和任何过滤器的表单最容易解决这个问题;您可以将表单元素放置在任何您想要的位置。
你的表格必须是这样的:
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}}
and {{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 与第二种形式的字段同步。这将产生小的冗余,但似乎很容易实现。
这是个好主意吗?