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