提高管理员中Django ForeignKey字段的性能

时间:2011-02-24 17:18:25

标签: python django django-admin

默认情况下,Django的管理员将admin中的ForeignKey字段作为选择字段呈现,将外表中的每条记录列为选项。在一个可管理的模型中,我将User模型引用为ForeignKey,因为我有成千上万的用户,Django正在使用数千个选项填充选择。这导致管理页面加载速度极慢,而选择不是很有用,因为可能需要一段时间才能滚动数千个选项来找到你想要的那个。

更改此字段的呈现以改善页面加载和可用性的最佳方法是什么?我希望将select字段替换为某种按钮以启动搜索表单弹出窗口,或者通过Ajax搜索关键字以查找要关联的特定用户的Id的文本字段。管理员是否有类似内置的内容,或者我是否必须从头开始编写?

4 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:8)

您可以使用Django的少数自动完成应用之一。在Django Packages处查看它们。

django-extensions还有ForeignKeyAutocompleteAdmin可以很好地满足您的需求。

答案 2 :(得分:1)

你是对的,Cerin,减速的原因是因为Django填充<select>元素的选项太多了。您可能希望使用自动完成元素。

有趣的是,Django 2.0在管理网站上引入了一项名为autocomplete_fields的新功能,我认为在这种情况下你会觉得很有用。它使用AJAX。

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

答案 3 :(得分:0)

Another option is to add readonly_fields instead of raw_id_fields