Django Haystack - 未显示覆盖 SearchForm 中字段的初始值
Django Haystack - initial value for fields in overriden SearchForm not being displayed
在一个我 运行 多年的网站上,我刚刚将 Django 和 Haystack 分别从 1.11.5 和 2.6.1 升级到 2.0.5 和 2.8.1。升级的一切似乎都进行得很顺利,除了我在覆盖的 SearchForm
中提供的 initial
值不再被使用。我不知道为什么。我在 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>
...
这是生成的渲染的屏幕截图:
如您所见,两个日期都未显示。
请注意,在升级之前,此 确实 有效。我想知道从那时到现在,Haystack 处理 initial
参数的方式是否发生了变化。我已经非常广泛地检查了 Django 和 Haystack 的更新日志,但没有什么让我印象深刻的。
有人对此有任何指导吗?谢谢!
[编辑 - 2017-05-09]
我刚刚尝试将 only Haystack 降级回 2.6.1,这 does 工作。因此,从那时起,Haystack 的 SearchForm
处理 initial
参数的方式一定发生了变化。
我通过尝试在此处列出的每个版本进行了更多调试。 2.7.dev0 有效,但 2.7.0 无效。所以看起来我遇到的错误是在这两个版本之间引入的。请注意,我正在捕获有关我上面提到的问题的所有信息 (here)。
我刚弄明白是怎么回事。经过一些调试,我找到了引入这个错误的提交(具体见https://github.com/django-haystack/django-haystack/issues/1605#issuecomment-387938032)。
我已经向 Haystack 人员指出了确切的错误,希望他们能尽快做出修复。
在一个我 运行 多年的网站上,我刚刚将 Django 和 Haystack 分别从 1.11.5 和 2.6.1 升级到 2.0.5 和 2.8.1。升级的一切似乎都进行得很顺利,除了我在覆盖的 SearchForm
中提供的 initial
值不再被使用。我不知道为什么。我在 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>
...
这是生成的渲染的屏幕截图:
如您所见,两个日期都未显示。
请注意,在升级之前,此 确实 有效。我想知道从那时到现在,Haystack 处理 initial
参数的方式是否发生了变化。我已经非常广泛地检查了 Django 和 Haystack 的更新日志,但没有什么让我印象深刻的。
有人对此有任何指导吗?谢谢!
[编辑 - 2017-05-09]
我刚刚尝试将 only Haystack 降级回 2.6.1,这 does 工作。因此,从那时起,Haystack 的 SearchForm
处理 initial
参数的方式一定发生了变化。
我通过尝试在此处列出的每个版本进行了更多调试。 2.7.dev0 有效,但 2.7.0 无效。所以看起来我遇到的错误是在这两个版本之间引入的。请注意,我正在捕获有关我上面提到的问题的所有信息 (here)。
我刚弄明白是怎么回事。经过一些调试,我找到了引入这个错误的提交(具体见https://github.com/django-haystack/django-haystack/issues/1605#issuecomment-387938032)。
我已经向 Haystack 人员指出了确切的错误,希望他们能尽快做出修复。