2013-02-13 58 views
0

我正在嘗試在Django Tables 2中使用Haystack/Whoosh搜索。搜索結果應呈現爲表格。這是我的當前視圖用於呈現的表:在Django中使用Haystack搜索表2視圖

def people(request): 
    table = PersonTable(Person.objects.filter(pk=1)) 
    RequestConfig(request).configure(table) 
    return render(request, 'people.html', {'table': table}) 

草堆應該通過搜索結果的主鍵,以上述的觀點函數像這樣Person.objects.filter(pk=va1,pk=var2)所以這個視圖函數可以顯示結果。


我可以寫一個工作的看法:

def report(request, template='report.html', load_all=True, form_class=ModelSearchForm, searchqueryset=None, context_class=RequestContext, extra_context=None, results_per_page=None): 
    table = '' 
    query = '' 
    results = EmptySearchQuerySet() 

    if request.GET.get('q'): 
     form = form_class(request.GET, searchqueryset=searchqueryset, load_all=load_all) 

     if form.is_valid(): 
      query = form.cleaned_data['q'] 
      results = form.search() 
      pklist = [ r.pk for r in results ] 
      table = PersonTable(Person.objects.filter(pk__in=pklist)) 
      RequestConfig(request).configure(table) 
    else: 
     form = form_class(searchqueryset=searchqueryset, load_all=load_all) 

    context = { 
     'form': form, 
     'table': table, 
    } 

    return render_to_response(template, context, context_instance=context_class(request)) 

它的工作原理莫名其妙。但是,因爲我只是一個Django初學者,所以我覺得有改進的空間。我在這裏發佈它以獲得一些有用的建議。

回答

0

假設使用SearchQuerySet創建PersonTable實例不是一種選擇,您可以嘗試從搜索中傳遞Person對象的列表。

def search(request): 
    # Let's say there's some logic here for querying your search engine 
    # using Haystack, and `results` is a SearchQuerySet of Person results 
    table = PersonTable([result.object for result in results]) 
    RequestConfig(request).configure(table) 
    return render(request, 'people.html', {'table': table}) 

否則,您需要將結果的主鍵傳遞給視圖函數的問題聲明有點不清楚。