我想在我的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/