Django 管理员搜索通配符



我想在我的django管理站点中添加对*通配符的支持。
目前,如果我有一个名为 "abcde" 的实例,并且我在更改abc列表中搜索它(假设我做了一个 icontains 过滤器(,它将找到匹配项。
但是,当我在搜索字段中使用 SQL 通配符*时,例如:a*c,它什么也找不到。如何添加此通配符支持?
谢谢。

我们现在(大约 2017/Django 2.1(只需在搜索字段名称中添加 __regex__iregex 等过滤器,它们将被 ModelAdmin 自动拾取。根据您的数据库,这为您提供了对 POSIX 正则表达式的支持,如 .* ^abc(ab|cd) 和类似:

class MyAdmin(admin.ModelAdmin):
    search_fields = ("my_field__regex",)

参见:Django 正则表达式过滤器,相关提交

PS:对于真正的通配符支持,您还可以覆盖上述类中的get_search_results,以将搜索词中的*替换为.*。(不知道我是否可以推荐,可能有一些奇怪的边缘情况(:

   def get_search_results(self, request, queryset, search_term):
        search_term = search_term.replace("*", ".*")
        return super().get_search_results(request, queryset, search_term)

您可以实现自己的 ModelAdmin.get_search_results 方法来支持此功能。

看看这个实现片段:https://djangosnippets.org/snippets/3005/

最新更新