0

如何在现有的views.py中实现工作的SearchView? 我已经拥有CBV,并且以urls.py的形式添加为/ moderate,并希望在其中应用搜索表单。但总是得到“结果未找到结果”。在现有模板上的干草堆

这是使用SearchView和模板中教程中的一段代码的3种形式的我/中等页面。

enter image description here

这从/搜索页面,使用URL(R '^搜索/ $',包括( 'haystack.urls'))

enter image description here

urls.py

urlpatterns= [ 
    url(r'^search/', include('haystack.urls')), 
    url(r'^moderate/', Moderate.as_view(), name='moderate'), 
] 

views.py

class Moderate(SearchView): 

    @method_decorator(staff_member_required) 
    def dispatch(self, *args, **kwargs): 
     return super(Moderate, self).dispatch(*args, **kwargs) 

    #model = Ad 
    template_name = 'adapp/ad_moderate.html' 
    #template_name = 'search/search.html' 

    paginator_class = DiggPaginator 
    paginate_by = 10 
    ad_type = None 
    ad_sub_type = None 

    def get_queryset(self): 
     qs = super(Moderate, self).get_queryset().filter(ad_type__isnull=False, 
                  ad_sub_type__isnull=False) 

     return qs 

    def get_context_data(self, **kwargs): 
     context = super(Moderate, self).get_context_data(**kwargs) 
     context['filter'] = ModerateFilter(self.request.GET) 

     return context 

    # define method to recieve fields from form, and change data accordings 
    def post(self, request, *args, **kwargs): 
     selected = request.POST['selected'] 
     record = Ad.objects.get(pk=int(selected)) 
     form = ModerateForm(request.POST, instance=record) 
     if form.is_valid(): 
      form.save(commit=True) 
      return HttpResponseRedirect('') 

模板/ ad_moderate.html

{% extends 'base.html' %} 

{% load i18n url_tags %} 

{% block content %} 
    <div id="casing"> 
     <div id="content"> 

{# filter form, to show only models with moderated=True #} 
    <form action="" method="get"> 
     {{ filter.form.as_p }} 
     <input type="submit"> 
    </form> 

    <h2>Search</h2> 

{# search form right from tutorial #} 
    <form method="get" action=""> 
     <table> 
      {{ form.as_table }} 
      <tr> 
       <td>&nbsp;</td> 
       <td> 
        <input type="submit" value="Search"> 
       </td> 
      </tr> 
     </table> 

     {% if query %} 
      <h3>Results</h3> 

      {% for result in page.object_list %} 
       <p> 
        <a href="{{ result.object.get_absolute_url }}">{{ result.object.title }}</a> 
       </p> 
      {% empty %} 
       <p>No results found.</p> 
      {% endfor %} 

     {% else %} 
      {# Show some example queries to run, maybe query syntax, something else? #} 
     {% endif %} 
    </form> 

      {% for object in filter %} 
{# a lot of template tags and third form to change value of model #} 
        <form action="" method="POST"> 
         {% csrf_token %} 
         <input type="radio" name="moderated" value="True">Accept 
         <br> 
         <input type="radio" name="moderated" value="False">Decline 
         <input type="hidden" value="{{ object.id }}" 
         name="selected"> 
         <input class="btn" type="submit" value="moderate"> 
        </form> 

search_indexes.py

from .models import Ad 

class AdIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 

    def get_model(self): 
    # my model, with one search should be 
     return Ad 

模板/搜索/索引/应用/ ad_text.txt

{{ object.title }} 
{{ object.short_desc }} 
{{ object.description }} 
{{ object.experience }} 
{{ object.skills }} 
{{ object.name }} 
{{ object.city }} 
+0

没有太多信息...您的搜索引擎是否已在运行并正确配置? – cdvv7788

+0

yeap,对于缺乏信息抱歉,只是现在充满。 – kAldown

回答

0
get_context_data(): 
    context['search'] = SearchForm(self.request.GET).search() 

会解决问题。

这意味着,我应该创建窗体并从.save()方法返回返回,而不是类似于django的窗体实例。

+0

请添加一些解释您的答案! –