Администратор Django: Изменить выбранное поле связанных полей на автозаполнение - PullRequest
18 голосов
/ 20 марта 2012

У нас есть некоторые модели, в которых пользователь использует внешний ключ.Но имея около 25000 пользователей в нашей системе, немного сложно найти того, кто нам нужен.

Есть ли решение, которое лучше, чем поле выбора?Может быть автозаполнение, чтобы мы могли начать вводить имя пользователя / адрес?Или просто окно поиска?При переключении связанного пользователя для этих объектов становится все сложнее с 25000 несортированных пользователей.

Было бы полезно даже установить его для сортировки пользователей по имени пользователя.

Ответы [ 5 ]

25 голосов
/ 21 марта 2012

У меня была эта проблема, и я решил использовать вместо этого поле автозаполнения.Это работает довольно хорошо в большинстве случаев.Единственная проблема, когда у вас много записей, которые в основном одинаковы.Например, в вашем случае, если вы наберете Robert для имени и в списке будет несколько сотен Robert записей ...

Есть много приложений, которыедобавить автозаполнение для администратора Django:

Мой любимый - последний.Он хорошо написан, его можно использовать как с администратором, так и вне его, он работает с ManyToManyFields, ForeignKeyFields, CharFields и т. Д.

Я сделал fork этого проекта для моего клиентаэто добавляет некоторые тонкости, такие как кнопка поиска (лупа), как ForeignKeyRawIdWidget.

23 голосов
/ 02 февраля 2018

Администратор Django 2.0 имеет встроенное автозаполнение , просто установите поле autocomplete_fields в классе ModelAdmin.например,

class QuestionAdmin(admin.ModelAdmin):
    ordering = ['date_created']
    search_fields = ['question_text']

class ChoiceAdmin(admin.ModelAdmin):
    autocomplete_fields = ['question']
5 голосов
/ 23 марта 2012

Самое простое готовое решение - добавить поле к вашим ModelAdmin raw_id_fields - тогда вы получите всплывающее окно, в котором вы можетеиспользуйте встроенные элементы управления поиском / фильтрацией и разбиением на страницы, чтобы найти и выбрать объект, который вам нужен.

Если вы действительно хотите автозаполнение, другие ответы дают вам разумную отправную точку.

4 голосов
/ 20 марта 2012

Вы можете использовать ForeignKeyRawIdWidget с django.contrib.admin.widgets. Он отображает отношения FK в качестве входных данных с небольшой кнопкой вдоль стороны, которая представляет всплывающее окно с возможностью поиска.

0 голосов
/ 20 марта 2012
...