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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。