Django Haystack - 覆盖SearchForm中字段的初始值未显示

时间:2018-05-08 17:06:43

标签: python django django-forms django-haystack

在我已运行多年的网站上,我刚刚将Django和Haystack分别从1.11.5和2.6.1升级到2.0.5和2.8.1。除了我在覆盖initial中提供的SearchForm值不再被使用之外,升级的所有内容似乎都很顺利。我无法弄清楚为什么。我在Haystack的问题跟踪器here上发布了一个问题,但我没有收到回复,所以我希望这里有人可能会有一些见解。

以下是表格:

from haystack.forms import SearchForm

class SearchForm(SearchForm):                                            
    start_date = forms.DateField(initial=Post.get_first_post_timestamp(),
                                 input_formats=['%Y-%m-%d'])
    end_date = forms.DateField(initial=datetime.date.today,
                               input_formats=['%Y-%m-%d'])
    thread_type = forms.ChoiceField(choices=[('All Types', 'All Types')] + Thread.get_sorted_unique_types_choices())

以下是观点:

import haystack.generic_views

from apps.listserv.forms import SearchForm

class SearchView(haystack.generic_views.SearchView):
    template_name = 'listserv/search.html'
    form_class = SearchForm
    results_per_page = 10

这是模板:

...
[{{ form.start_date.value }}]

<form action="." method="get">
    <p style="text-align: center; font-weight: bold;">Search: {{ form.q }}</p>
    <p style="text-align: center; font-weight: bold;">Dates: {{ form.start_date }} to {{ form.end_date }}</p>
    <p style="text-align: center; font-weight: bold;">Thread Type: {{ form.thread_type }}</p>
    <p style="text-align: center;"><input type="submit" value="Search"></p>
</form>
...

以下是生成的渲染的屏幕截图:

render

如您所见,日期均未显示。

请注意,在升级之前,此确实有效。我想知道在Haystack如何处理initial参数之间,当时和现在之间是否发生了变化。我已经非常广泛地检查了Django和Haystack的更改日志,但没有任何内容突然出现在我身上。

有人对此有任何指导吗?谢谢!

[编辑 - 2017-05-09]
我只是尝试将干草堆降级回2.6.1,这个工作。因此,Haystack的SearchForm处理initial参数的方式必定会发生变化。

我通过尝试列出here的每个版本进行了一些调试。 2.7.dev0 工作,但2.7.0 。因此看起来我正在经历的错误是在这两个版本之间引入的。请注意,我正在捕获有关上述问题的所有信息(here)。

1 个答案:

答案 0 :(得分:0)

我只知道发生了什么。经过一些调试后,我发现了引入此bug的提交(详见https://github.com/django-haystack/django-haystack/issues/1605#issuecomment-387938032)。

我已经向Haystack家伙指出了确切的错误,所以希望他们能尽快回复。