Django admin: изменение выбранного поля связанных полей для автозаполнения
У нас есть некоторые модели, которые имеют пользователя как внешний ключ. Но около 25000 пользователей в нашей системе немного сложны, чтобы найти тот, который нам нужен.
Есть ли решение, которое лучше, чем поле выбора? Может быть, автозаполнение, чтобы мы могли начать вводить имя пользователя/адрес? Или просто окно поиска? При переключении соответствующего пользователя для этих объектов становится все труднее и труднее с 25000 несортированными пользователями.
Даже просто настроить его для сортировки пользователей по имени пользователя будет полезно.
Ответы
Ответ 1
У меня была эта проблема, и я решил использовать вместо этого поле автозаполнения. Это работает довольно хорошо в большинстве случаев. Единственная проблема, когда у вас много записей, которые в основном одинаковы. Например, в вашем случае, если вы введете имя Роберта и в списке будет несколько сотен записей Роберта...
UPDATE
Как упоминается в ответе shuckc, Django 2. 0+ админ, как теперь автозаполнение встроено в.
Для старшего Django или для использования вне администратора (старый ответ)
Существует множество приложений, которые добавляют автозаполнение администратору Django:
Мой любимый - последний. Он хорошо написан, его можно использовать как с администратором, так и вне его, он работает с ManyToManyFields, ForeignKeyFields, CharFields и т.д.
Я сделал форк этого проекта для моего клиента, который добавляет некоторые тонкости, такие как кнопка поиска (лупа), например ForeignKeyRawIdWidget
.
Ответ 2
Администратор Django 2.0 имеет встроенную функцию автозаполнения, просто установите поле autocomplete_fields
в классе ModelAdmin
. например
class QuestionAdmin(admin.ModelAdmin):
ordering = ['date_created']
search_fields = ['question_text']
class ChoiceAdmin(admin.ModelAdmin):
autocomplete_fields = ['question']
Ответ 3
Самое простое из готовых решений состоит в том, чтобы добавить поле в ваш ModelAdmin
raw_id_fields
- Появится всплывающее окно, в котором вы можете использовать встроенный элемент поиска/фильтрации и разбиения на страницы, чтобы найти и выбрать объект, который вам нужен.
Если вы действительно хотите автозаполнение, другие ответы дают вам разумную отправную точку.
Ответ 4
Вы можете использовать ForeignKeyRawIdWidget
от django.contrib.admin.widgets
. Он отображает отношения FK как вход с небольшой кнопкой вдоль стороны, которая представляет собой всплывающее окно с возможностью поиска.
Ответ 5
Есть приложение для этого (django-autocomplete).
Ответ 6
Нашел очень подходящее встроенное решение для этого: используйте filter_horizontal
в вашем Admin config:
Скажите, что у вас есть School
и Student
Model, а школа имеет отношение ManyToManyField
к длинному списку студентов.
# model.py
class School(models.Model):
...
students = models.ManyToManyField(Student)
Просто добавьте это в свой SchoolAdmin
:
# admin.py
filter_horizontal = ('student',)
Вы получите такую договоренность!
![введите описание изображения здесь]()