我在其中一个项目中使用django-haystack
和Solr
后端。我有一个继承自FacetedSearchForm
的SearchForm。现在,我要做的是为表格中的一些字段添加一个初始值。
from django.forms import forms
from haystack.forms import FacetedSearchForm
MySearchForm(FacetedSearchForm):
""" My basic search form
"""
field_one = forms.CharField(required=False, initial='0')
field_two = forms.CharField(required=False, initial='some_value')
以前当我使用django.forms.Form
时,这曾经非常好用。我一直在挖掘django代码和haystack代码,并喜欢FacetedSearchForm
扩展haystack.forms.SearchForm
扩展django.forms.Forms
。所以我看不出为什么这不起作用的原因。
参考文献:
我也尝试重写__init__
方法,并认为我会在那里设置初始值:
def __init__(self, *args. **kwargs):
data = kwargs.pop('data', None)
if data:
values = {
'field_one': (data.get('field_one', None), '0'),
'field_two': (data.get('field_two', None), 'some_value')
}
for value in values:
if not values[value][0]:
self.fields[value].initial = values[value][3]
super(MySearchForm, self).__init__(*args, **kwargs)
但在FacetedSearchForm
中没有fields
属性,但它们提供对base_fields
对象的访问权限,所以我试着这样做:
self.base_fields[value].initial = values[value][4]
也不起作用。
当我意识到它没有引发任何错误或异常时出现了奇怪的部分,所以我尝试将初始值打印出来进行调试,并确实显示初始值已设置。
但是当在模板中呈现表单时,字段没有这些初始值。对于模板中的两个字段,字段的值均为“无”。
我尝试使用以下方法检查值:
{{ form.field_one.value }}
{{ form.field_two.value }}
,输出为:
无
无
以前有人遇到过这个问题吗?在呈现表单时,如何在模板中显示初始值?
答案 0 :(得分:0)
由于django.forms.Form
将初始数据仅设置为未绑定的表单设置inital不是此处的选项。我们应该将初始值作为数据传递给build_form
中的haystack.views.FacetedSearchView
方法,因为这是初始化表单的位置。
示例:
MySearchView(FacetedSearchView):
def build_form(self, form_kwargs=None):
""" Overrides the build_form method to send initial data
"""
form = super(MySearchForm, self).build_form(form_kwargs)
form_data = form.data.copy() # Need to copy this as QueryDict is immutable
# Set initial data hete
form_data['field_name'] = 'fields_inital_value'
form.data = form_data
return form