我在我的一个项目中使用django-haystack
后端Solr
。我有一个继承自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
extends haystack.forms.SearchForm
which extends 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)
但是在 aFacetedSearchForm
中没有fields
属性,尽管它们提供对base_fields
对象的访问,所以我尝试这样做:
self.base_fields[value].initial = values[value][4]
这也不起作用。
当我意识到它不会引发任何错误或异常时,奇怪的部分来了,所以我尝试打印出初始值进行调试,它确实表明初始值已设置。
但是当表单在模板中呈现时,字段没有那些初始值。对于模板中的两个字段,字段的值为 None。
我尝试使用以下方法检查值:
{{ form.field_one.value }}
{{ form.field_two.value }}
输出是:
没有任何
没有任何
有没有人遇到过这个问题?呈现表单时如何在模板中显示初始值?