首页 > 解决方案 > 在 ListView 中搜索查询完全匹配,重定向到 DetailView - Django

问题描述

使用 ListView 显示来自用户查询的搜索结果。

如果他们搜索的项目与特定的 DetailView 完全匹配,我如何添加重定向?

class WikiSearchView(ListView):
    template_name = "encyclopedia/wiki_search.html"
    model = Entry
    paginate_by = 25
    context_object_name = "searchResults"

    def get_queryset(self):
        search = self.request.GET.get('q')
        object_list = Entry.objects.filter(Q(title__icontains=search))
        return object_list

我尝试使用 Entry.objects.get 添加 try/except 以查找完全匹配,然后使用返回重定向(xyz),但这不起作用。

标签: djangodjango-views

解决方案


您可以尝试使用以下exists()方法:

class WikiSearchView(ListView):
    template_name = "encyclopedia/wiki_search.html"
    model = Entry
    paginate_by = 25
    context_object_name = "searchResults"
    search = None

    def get_queryset(self):
        queryset = super().get_queryset() 
        return queryset.filter(Q(title__icontains= self.search))

    def get(self, request, *args, **kwargs):
        self.search = request.GET.get('q') 
        query = Entry.objects.filter(title__iexact= self.search)  # search for title by ignoring upper/lowecase letters
        if query.exists():
            return redirect('detail-view', pk=query.first().pk)
        return super().get(request, *args, **kwargs)

推荐阅读