プロジェクトの 1 つでバックエンドを使用django-haystack
しています。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
。したがって、これが機能しない理由がわかりません。
参考文献:
また、メソッドをオーバーライドしようとしました__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 }}
出力は次のとおりです。
なし
なし
以前にこの問題に遭遇した人はいますか? フォームがレンダリングされるときにテンプレートに初期値を表示するにはどうすればよいですか?