Как изменить фильтр администратора Django для использования выпадающего списка вместо списка, по которому также можно осуществлять поиск?
Прежде чем вы пометите это как дубликат, я прочитал решения этого вопроса.
В Django Admin у меня много значений. Команда, которая работает над этими данными, в настоящее время может использовать CTRL+F, чтобы хотя бы найти нужное поле.
Для исправления UI у меня есть опция рендеринга Dropdown, доступная в решении вопроса, помеченного выше. Но, как я уже сказал, мне нужно, чтобы он был доступен для поиска.
Я боролся с той же проблемой несколько недель назад. Так что этот ответ может быть полезен некоторым разработчикам в будущем.
Мне удалось решить проблему, написав пользовательский template.html
.
Теперь я собрал код в удивительный пакет, который делает то же самое для вас, вот ссылка .
Вот как можно реализовать выпадающий список с возможностью поиска вместо списка по умолчанию:
1. Установка:
pip install django-admin-searchable-dropdown
Эта команда установит последнюю версию пакета в ваш проект.
Теперь включите пакет в свой проект, добавив admin_searchable_dropdown
к вашему INSTALLED_APPS
внутри settings.py
файла.
2. Использование:
Допустим, у вас есть следующие модели:
from django.db import models
class CarCompany(models.Model):
name = models.CharField(max_length=128)
class CarModel(models.Model):
name = models.CharField(max_length=64)
company = models.ForeignKey(CarCompany, on_delete=models.CASCADE)
И вы хотите отфильтровать результаты в CarModelAdmin
на основе company
. Вам нужно определить search_fields
в CarCompany
и затем определить фильтр следующим образом:
from django.contrib import admin
from admin_searchable_dropdown.filters import AutocompleteFilter
class CarCompanyFilter(AutocompleteFilter):
title = 'Company' # display title
field_name = 'company' # name of the foreign key field
class CarCompanyAdmin(admin.ModelAdmin):
search_fields = ['name'] # this is required for django's autocomplete functionality
# ...
class CarModelAdmin(admin.ModelAdmin):
list_filter = [CarCompanyFilter]
# ...
После выполнения этих шагов вы можете увидеть фильтр следующим образом:
- Вот как фильтр списка отображается в виде выпадающего списка при использовании пакета
- Выпадающий фильтр также доступен для поиска
Предлагаемые функции:
- Если у вас большие поля в фильтре администратора, боковая панель расширяется, этот пакет предоставляет вам тот же список в выпадающем формате, следовательно, нет таких хлопот.
- Если у вас больше, чем, скажем, 20 элементов поля, фильтр списка становится длинной боковой панелью, просто разрушая интерфейс администратора. Выпадающий фильтр исправляет это.
- Выпадающий фильтр также "поисковый", с текстовым полем ввода (которое использует собственную функцию Django
auto_complete
), так что пока версия Django, которую вы используете, выше 2.0, все будет в порядке. - Вы можете настроить другие
list_filters
, которые у вас могут быть, например, изменить Заголовок над выпадающим меню, или пользовательскую логику поиска и т.д. - Вы можете настроить тексты виджетов для отображения в опции выпадающего списка, чтобы использовать что-то другое, чем по умолчанию
str(obj)
.