当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django ModelAdmin.get_search_results用法及代码示例


本文介绍 django.contrib.admin.ModelAdmin.get_search_results 的用法。

声明

ModelAdmin.get_search_results(request, queryset, search_term)

get_search_results 方法将显示的对象列表修改为与提供的搜索词匹配的对象列表。它接受请求、应用当前过滤器的查询集和用户提供的搜索词。它返回一个元组,其中包含一个经过修改以实现搜索的查询集,以及一个指示结果是否可能包含重复项的布尔值。

默认实现搜索在 ModelAdmin.search_fields 中命名的字段。

此方法可能会被您自己的自定义搜索方法覆盖。例如,您可能希望按整数字段搜索,或使用外部工具,如 Solr 或 Haystack。您必须确定您的搜索方法实现的查询集更改是否会在结果中引入重复项,并在返回值的第二个元素中返回 True

例如,要按 nameage 搜索,您可以使用:

class PersonAdmin(admin.ModelAdmin):
    list_display = ('name', 'age')
    search_fields = ('name',)

    def get_search_results(self, request, queryset, search_term):
        queryset, may_have_duplicates = super().get_search_results(
            request, queryset, search_term,
        )
        try:
            search_term_as_int = int(search_term)
        except ValueError:
            pass
        else:
            queryset |= self.model.objects.filter(age=search_term_as_int)
        return queryset, may_have_duplicates

此实现比 search_fields = ('name', '=age') 更有效,后者导致数字字段的字符串比较,例如 PostgreSQL 上的 ... OR UPPER("polls_choice"."votes"::text) = UPPER('4')

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.contrib.admin.ModelAdmin.get_search_results。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。