我正在开发一个分面搜索系统。在搜索框下方,有一个无线电选择小部件,其中包含以下选项:
O New search O Within your results
加载页面时,默认情况下应选择新搜索,因此我使用initial
关键字。
我遇到的问题是,在用户选择New search
并发出查询后,我希望将默认设置切换为Within your results
,因为大多数搜索都是优化。
所以我需要做的是更改用户提交的值,该值存储在Django Form
中。
如何更改表单字段的值?验证已经发生,从我到目前为止收集的内容来看,request.GET
是不可变的(可能是一件好事),我也无法更改Form
。
答案 0 :(得分:0)
django推荐的修改request.GET
的方法是call the copy
method.
mutable_get = request.GET.copy()
mutable_get['search'] = 'within_results'
您还可以使用__init__
形式动态设置初始值,或者只访问绑定的表单字段属性。
form.fields['my_field'].initial = True
哪一项起作用取决于你如何构建表格。
答案 1 :(得分:0)
class MyForm(forms.Form):
def __init__(self, data, *args, **kwargs):
if 'do_search' in data: # or any other way to find out if there is an existing search
kwargs['initial'] = kwargs.setdefault('initial', {'your_radio': 'your_within_value'})
super(MyForm, self).__init__(self, data, *args, **kwargs)
答案 2 :(得分:0)
只是一个想法,而不是黑客用户输入,只有当你有搜索的查询参数时才能显示该字段。
这种方式,用户第一次“点击”视图时,他看不到无用的无线电场。
e.g。在这里我将在表单的__init__期间使用搜索参数将字段设置为隐藏且具有正确的初始值(您还可以执行类似DrTysa建议的操作并在表单级别移动搜索检测查看数据字典)
searching = False
if data.get('query'):
searching = True
form = SearchForm(data, searching=searching)