默认情况下,Django的管理员将admin中的ForeignKey字段作为选择字段呈现,将外表中的每条记录列为选项。在一个可管理的模型中,我将User模型引用为ForeignKey,因为我有成千上万的用户,Django正在使用数千个选项填充选择。这导致管理页面加载速度极慢,而选择不是很有用,因为可能需要一段时间才能滚动数千个选项来找到你想要的那个。
更改此字段的呈现以改善页面加载和可用性的最佳方法是什么?我希望将select字段替换为某种按钮以启动搜索表单弹出窗口,或者通过Ajax搜索关键字以查找要关联的特定用户的Id的文本字段。管理员是否有类似内置的内容,或者我是否必须从头开始编写?
答案 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