Автозаполнение Django Light в фильтрах списка для администратора

Я успешно настроил реестр автозаполнения и у меня есть формы администратора django, где, если вы перейдете к форме, автозаполнение сработает. Я хотел бы иметь возможность расширить автозаполнение для работы с представлением list_filter. Итак, когда вы смотрите на представление, сгенерированное Admin.py, то сгенерированные входные данные list_filter также будут использовать автозаполнение jquery + URL-адрес службы.

Я не видел ничего перечисленного в документации, у кого-нибудь есть какие-либо указатели?


person Trent Brown    schedule 14.02.2016    source источник


Ответы (2)


Если вы используете версию 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
comment
Работает только для ForeingKeys, а не для CharFields - person destresa; 17.01.2021
comment
Внимание: django-admin-autocomplete-filter использует лицензию GPL, что делает ее непригодной для многих случаев использования. - person guettli; 04.04.2021

Вы должны определить свой собственный фильтр администратора, который наследуется от django.contrib.admin.SimpleListFilter. Затем следует предоставить собственный HTML-шаблон для этого фильтра, который будет использовать один из django-autocomplete-light виджетов. В качестве параметра для виджета вы должны указать требуемый URL автозаполнения. И не забудьте включить для него правильный JS и CSS.

Все это делается в специальном приложении для этого: dal-admin-filters

person Roman Gorbil    schedule 07.06.2017