Django 管理搜索:如何覆盖默认处理程序?
我希望自定义跨 search_fields 进行搜索查询的方式。
有没有一种方法可以做到这一点,而无需深入 Django 代码或创建完全独立的视图?
例如,我想返回 querystring.split() 的每个项目的查询集的并集。因此,搜索“apple bar”将返回带有 apple OR bar 的结果,这与应用 AND 运算符的默认搜索不同。
I wish to customize the way in which search queries across the search_fields.
Is there a way to do it without hacking deeply into the Django code or creating a totally independent view?
For instance, I would like to return the union of the querysets for each of the items of the querystring.split(). So that searching for "apple bar" would return results with EITHER apple OR bar, unlike the default search which applies an AND operator.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在 django 1.6 中很容易做到这一点
ModelAdmin.get_search_results(request, queryset, search_term) Django 1.6 中的新增功能。
It is very easy to do this in django 1.6
ModelAdmin.get_search_results(request, queryset, search_term) New in Django 1.6.
所以我一直在使用WeizhongTu的答案中的代码,发现其中有一个不太明显的错误。当我们尝试通过此代码同时使用过滤和搜索时,过滤会被以下行遮盖:
queryset = self.model.objects.filter(eval(query_condition))
使用之前的结果非常重要仅有的。所以你绝对不能使用 self.model.objects 来获取查询集,而只能过滤查询集本身。像这样:
So I have been using the code from WeizhongTu's answer and found a not-so-obvious error in it. When we try to use both filtering and searching with this code, filtering is shadowed by this line:
queryset = self.model.objects.filter(eval(query_condition))
It is important to use the previous results ONLY. So you must never use
self.model.objects
to obtain the queryset, but only filter the queryset itself. Like this:您可以添加一个
ModelAdmin
方法:您在这里有一个请求,因此大多数内容都可以依赖于视图,包括 url 参数、cookie、会话等。
you can add an
ModelAdmin
method:you have a request here, so most of the stuff can be view dependent, including url parameters, cookies, sessions etc.