1

プロジェクトの 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。したがって、これが機能しない理由がわかりません。

参考文献:

  1. haystack.forms.FacetedSearchForm
  2. django.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はありません。そのため、代わりに次のことを試しました。fieldsbase_fields

self.base_fields[value].initial = values[value][4]

どちらも機能しません。

エラーや例外が発生しないことに気付いたときに奇妙な部分が発生したので、初期値を出力してデバッグしようとしたところ、初期値が設定されていることがわかりました。

ただし、テンプレートでフォームがレンダリングされると、フィールドにはこれらの初期値がありません。フィールドの値は、テンプレートの両方のフィールドで None です。

次を使用して値を確認してみました:

{{ form.field_one.value }}
{{ form.field_two.value }}

出力は次のとおりです。

なし

なし

以前にこの問題に遭遇した人はいますか? フォームがレンダリングされるときにテンプレートに初期値を表示するにはどうすればよいですか?

4

1 に答える 1