我按照入门文档进行操作,并且每项工作都很顺利! :)
但是我想用自定义表单替换/search/search.html中的表单而没有可选择的模型复选框。
在表单中,我想添加一个点击按钮,按标准订购搜索结果 我的问题是:
我需要创建或修改哪些文件来执行这些文件以及它们的作用是什么?
我的代码是:
search_indexes.py
from haystack import indexes
from models import ProduitCommerce
class ProduitIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
commerce = indexes.CharField(model_attr = 'nom_commerce')
nom = indexes.CharField(model_attr = 'nom_produit')
price = indexes.DecimalField(model_attr = 'prix') #Field to filter ON
def get_model(self):
return ProduitCommerce
搜索/ search.html
{% extends 'base.html' %}
{% block content %}
<h2>Search</h2>
<form method="get" action=".">
<table>
{{ form.as_table }} <!------ FORM TO CHANGE BY A CUSTOM FORM BLOCK TO INCLUDE WITH DJANGO ------->
<tr>
<td> </td>
<td>
<input type="submit" value="Search">
</td>
</tr>
</table>
{% if query %}
<h3>Results</h3>
<!---------------------------- PLACE TO INCLUDE THE BUTTON TO FILTER ON result.object.prix------------------>
{% for result in page.object_list %}
<p>
<a href="{{ result.object.get_absolute_url }}">{{ result.object.nom_produit }}{{result.object.prix}}</a>
</p>
{% empty %}
<p>No results found.</p>
{% endfor %}
{% if page.has_previous or page.has_next %}
<div>
{% if page.has_previous %}<a href="?q={{ query }}&page={{ page.previous_page_number }}">{% endif %}« Previous{% if page.has_previous %}</a>{% endif %}
|
{% if page.has_next %}<a href="?q={{ query }}&page={{ page.next_page_number }}">{% endif %}Next »{% if page.has_next %}</a>{% endif %}
</div>
{% endif %}
{% else %}
{# Show some example queries to run, maybe query syntax, something else? #}
{% endif %}
</form>
produitcommerce_text.txt
{{ object.nom_produit }}
{{ object.nom_commerce }}
{{ object.description }}
{{ object.prix }}
PS:我正在研究1.5版本的django项目,并且像干草堆后端一样嗖嗖。
谢谢你的帮助:)
答案 0 :(得分:0)
您正在获取可选模型复选框,因为您正在扩展ModelSearchForm:
#forms.py
from haystack.forms import ModelSearchForm
class ProduitForm(ModelSearchForm):
您可以通过扩展haystack提供的简单搜索表单变体来轻松避免此行为:
#forms.py
from haystack.forms import SearchForm
class ProduitForm(SearchForm):
然后,您将在应用程序的urls.py中添加以下内容:
#urls.py
from haystack.query import SearchQuerySet
from haystack.views import SearchView, search_view_factory
from myapp.models import Produit
urlpatterns = patterns('',
url(r'^produit/search/$', search_view_factory(
view_class=SearchView,
template='search/search.html',
searchqueryset=SearchQuerySet().models(Resume),
form_class=ProduitForm
), name='produit_search'),
)
请注意,尝试将其与最新版本的Haystack和Whoosh一起使用时,.models()过滤器存在错误。如果您遇到上述策略的任何问题,那么您应该确保您的Haystack和Whoosh版本2.0.0和2.4.1相对经过测试并且运行良好。
另外,与您的问题无关,您可能希望避免在settings.py中使用HAYSTACK_SEARCH_RESULTS_PER_PAGE。它也有一个非常丑陋的bug。只是分享我的经验。请注意,此信息与Whoosh有关,任何其他后端都可以正常工作。