當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。