Django 设置字段';s干草堆内的初始值';s FacetedSearchForm
我正在我的一个项目中使用Django 设置字段';s干草堆内的初始值';s FacetedSearchForm,django,django-haystack,faceted-search,Django,Django Haystack,Faceted Search,我正在我的一个项目中使用Solr后端。我有一个SearchForm,它继承自FacetedSearchForm。现在,我要做的是向表单中的一些字段添加初始值 from django.forms import forms from haystack.forms import FacetedSearchForm MySearchForm(FacetedSearchForm): """ My basic search form ""
Solr
后端。我有一个SearchForm,它继承自FacetedSearchForm
。现在,我要做的是向表单中的一些字段添加初始值
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
。因此,我看不出有什么理由不能这样做
参考文献:
我还尝试重写\uuuu init\uuuu
方法,并认为应该在那里设置初始值:
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\u fields
对象的访问,所以我尝试执行以下操作:
self.base_fields[value].initial = values[value][4]
这也不起作用
奇怪的是,当我意识到它不会引发任何错误或异常时,我尝试打印初始值以进行调试,结果显示初始值已设置
但在模板中呈现表单时,字段没有这些初始值。模板中两个字段的字段值均为“无”
我尝试使用以下方法检查值:
{{ form.field_one.value }}
{{ form.field_two.value }}
输出为:
没有
没有
以前有人遇到过这个问题吗?当呈现表单时,如何在模板中显示初始值?作为
django.forms.form
仅将初始数据设置为未绑定表单设置初始值在此处不是选项。我们应该将初始值作为数据传递给haystack.views.FacetedSearchView
中的build\u form
方法,因为表单就是在这里初始化的
例如:
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