Улучшение производительности полей Django ForeignKey в Admin - PullRequest
17 голосов
/ 24 февраля 2011

По умолчанию администратор Django отображает поля ForeignKey в admin как поле выбора, перечисляя каждую запись в чужой таблице в качестве опции.В одной доступной для администратора модели я называю модель User как ForeignKey, и, поскольку у меня тысячи пользователей, Django заполняет выбор тысячами вариантов.Это приводит к тому, что страница администратора загружается невероятно медленно, и выбор не очень полезен, так как может потребоваться некоторое время для прокрутки тысяч вариантов, чтобы найти нужный.

Какой лучший способ изменитьрендеринг этого поля для улучшения загрузки страницы и удобства использования?Я бы хотел, чтобы поле выбора было заменено какой-то кнопкой для запуска всплывающего окна формы поиска или текстовым полем, которое ищет ключевые слова с помощью Ajax, чтобы найти идентификатор конкретного пользователя, которого они хотят связать.У администратора есть что-то подобное этому, или я должен был бы написать это с нуля?

Ответы [ 4 ]

27 голосов
/ 24 февраля 2011

Добавьте raw_id_fields к вашей модели, чтобы показать только идентификатор вместо выпадающего списка.

8 голосов
/ 24 февраля 2011

Вы можете использовать одно из немногих приложений автозаполнения для Django. Проверьте их на Пакеты Django .

Также есть django-extensions , которые имеют ForeignKeyAutocompleteAdmin, которые вполне соответствуют вашим потребностям.

1 голос
/ 05 июня 2018

Вы правы, Серин, причина замедления в том, что Джанго заполняет элемент <select> слишком большим количеством опций. Вместо этого вы можете использовать элемент автозаполнения.

Интересно, что в Django 2.0 появилась новая функция на сайте администратора под названием autocomplete_fields, которая, я думаю, вам пригодится в этом случае. Использует AJAX.

class ExampleAdmin(models.ModelAdmin):
    autocomplete_fields = ['example_field_user']
0 голосов
/ 23 января 2018

Другой вариант - добавить readonly_fields вместо raw_id_fields

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...