0

我按照入门文档进行操作,一切正常!:)

但我想用没有可选模型复选框的自定义表单替换 /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>&nbsp;</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 }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Previous{% if page.has_previous %}</a>{% endif %}
                |
                {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Next &raquo;{% 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 .1 版本和类似 haystack 后端的 django 项目。

谢谢你的帮助:)

4

1 回答 1

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。它还有一个非常丑陋的错误。只是分享我的经验。请注意,此信息与 Whoosh 有关,一切都应该与任何其他后端一起正常工作。

于 2013-10-20T05:50:58.347 回答