django - 在 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),但这不起作用。
解决方案
您可以尝试使用以下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)
推荐阅读
- node.js - 环回 app.models.ModelName 未定义
- symlink - 使用符号/软链接访问的页面在缓存时不会更改其内容(缓存已清除)
- tfs - 在 TFS 构建中使用 Fastlane 随机挂起
- json - PowerShell 调用-WebRequest | API 调用
- r - 在 linux 环境中从命令行调用 RStudio 的命令是什么?
- java - 使用 Java 8 并行流以原子方式更新从 Map 检索的元素
- python - 将浮点值列表的小数精度格式化为以逗号作为小数分隔符的元组序列
- javascript - jQuery委派的.off()不起作用
- angular - Angular 5 的子路由无法正常工作
- unit-testing - 如何区分单元测试和集成测试?