提高Django Admin中ForeignKey字段的性能

19

默认情况下,Django 的后台管理将 ForeignKey 字段呈现为选择字段,并将外键表中的每条记录列出为选项。在一个可由管理员访问的模型中,我使用了 User 模型作为 ForeignKey,由于有数千个用户,Django 将 select 填充了数千个选项。这导致管理员页面加载非常缓慢,而且由于需要滚动浏览数千个选项才能找到所需选项,因此这个 select 并不是很有用。

改善页面加载速度和易用性的最佳方式是什么?我想用某种按钮来替换 select 字段,以启动搜索表单弹出窗口,或者用 Ajax 搜索关键词的文本字段来查找特定用户的 ID。后台管理是否已经内置此类功能,还是我必须从头开始编写?


4个回答

30
raw_id_fields 添加到你的模型中,以仅显示ID而不是下拉列表。

没有自动补全功能,但有时最简单的解决方案是最好的。 - Matthew Schinckel
哦,而且 Chrome 在记住与 ID 相关联的名称方面非常擅长,可以进行一种自动补全。 - Matthew Schinckel

12

你说得对,Cerin。减速的原因是因为Django正在用太多的选项填充<select>元素。您可能需要使用自动完成元素来代替。

有趣的是,Django 2.0在管理站点上推出了一个新功能,称为autocomplete_fields,我认为在这种情况下会很有用。它使用AJAX。

class ExampleAdmin(models.ModelAdmin):
    autocomplete_fields = ['example_field_user']

10

0

另一个选项是添加readonly_fields而不是raw_id_fields


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接