我正在尝试使用Django Tables 2进行Haystack / Whoosh搜索。搜索结果应该呈现为表格。这是我呈现表格的当前视图:
def people(request):
table = PersonTable(Person.objects.filter(pk=1))
RequestConfig(request).configure(table)
return render(request, 'people.html', {'table': table})
Haystack应该将搜索结果的主键传递给上面的视图函数,如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 :(得分:1)
假设使用PersonTable
创建SearchQuerySet
实例不是一个选项,您可以尝试从搜索中传递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})
否则,您需要将结果的主键传递给视图函数的问题陈述有点不清楚。