【发布时间】:2013-05-02 14:06:24
【问题描述】:
我在我的一个项目中使用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]
这也不起作用。
当我意识到它不会引发任何错误或异常时,奇怪的部分来了,所以我尝试打印出初始值进行调试,它确实表明初始值已设置。
但是当表单在模板中呈现时,字段没有那些初始值。对于模板中的两个字段,字段的值都是 None。
我尝试使用以下方法检查值:
{{ form.field_one.value }}
{{ form.field_two.value }}
输出是:
无
无
以前有人遇到过这个问题吗?渲染表单时如何在模板中显示初始值?
【问题讨论】:
标签: django django-haystack faceted-search