Если вы используете версию Django выше 2.0, вы можете попробовать использовать встроенный файл автозаполнение для этой цели.
По умолчанию администратор использует интерфейс выбора () для этих полей. Иногда вы не хотите нести накладные расходы на выбор всех связанных экземпляров для отображения в раскрывающемся списке.
Ввод Select2 похож на ввод по умолчанию, но имеет функцию поиска, которая загружает параметры асинхронно.
Существует простое приложение, которое делает следующее:
Для установки используйте: pip install django-admin-autocomplete-filter
Затем добавьте admin_auto_filters
к INSTALLED_APPS
внутри settings.py вашего проекта.
Допустим, у нас есть следующие модели:
class Artist(models.Model):
name = models.CharField(max_length=128)
class Album(models.Model):
name = models.CharField(max_length=64)
artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
cover = models.CharField(max_length=256, null=True, default=None)
И вы хотели бы отфильтровать результаты в администраторе альбомов на основе исполнителя, тогда вы можете определить поля поиска в исполнителе, а затем определить фильтр как:
from admin_auto_filters.filters import AutocompleteFilter
class ArtistFilter(AutocompleteFilter):
title = 'Artist' # display title
field_name = 'artist' # name of the foreign key field
class ArtistAdmin(admin.ModelAdmin):
search_fields = ['name'] # this is required for django's autocomplete functionality
...
class AlbumAdmin(admin.ModelAdmin):
list_filter = [ArtistFilter]
'''
defining this class is required for AutocompleteFilter
it's a bug and I am working on it.
'''
class Media:
pass
После выполнения этих шагов вы можете увидеть фильтр как:
person
not2acoder
schedule
17.11.2018