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


Python Django ModelAdmin.autocomplete_fields用法及代碼示例


本文介紹django.contrib.admin.ModelAdmin.autocomplete_fields的用法。

聲明

ModelAdmin.autocomplete_fields

autocomplete_fields 是您希望更改為 Select2 自動完成輸入的 ForeignKey 和/或 ManyToManyField 字段的列表。

默認情況下,管理員對這些字段使用 select-box 接口 (<select>)。有時您不想承擔選擇所有相關實例以顯示在下拉列表中的開銷。

Select2 輸入看起來類似於默認輸入,但帶有一個異步加載選項的搜索函數。如果相關模型有很多實例,這會更快更多user-friendly。

您必須在相關對象的 ModelAdmin 上定義 search_fields ,因為自動完成搜索使用它。

為避免未經授權的數據泄露,用戶必須擁有相關對象的viewchange 權限才能使用自動完成函數。

結果的排序和分頁由相關的 ModelAdmin get_ordering() get_paginator() 方法控製。

在以下示例中,ChoiceAdmin 有一個從 ForeignKeyQuestion 的自動完成字段。結果由question_text 字段過濾並由date_created 字段排序:

class QuestionAdmin(admin.ModelAdmin):
    ordering = ['date_created']
    search_fields = ['question_text']

class ChoiceAdmin(admin.ModelAdmin):
    autocomplete_fields = ['question']

大型數據集的性能注意事項

使用 ModelAdmin.ordering 排序可能會導致性能問題,因為在大型查詢集上排序會很慢。

此外,如果您的搜索字段包含未被數據庫索引的字段,您可能會在超大表上遇到性能不佳的問題。

對於這些情況,最好使用full-text 索引搜索編寫自己的 ModelAdmin.get_search_results() 實現。

您可能還想在非常大的表上更改 Paginator,因為默認分頁器始終執行 count() 查詢。例如,您可以覆蓋 Paginator.count 屬性的默認實現。

相關用法


注:本文由純淨天空篩選整理自djangoproject.com大神的英文原創作品 django.contrib.admin.ModelAdmin.autocomplete_fields。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。