django-фильтр с автозаполнением django-light

Я использовал простой DAL и django-filter отдельно, но у меня возникли проблемы с использованием DAL с django-filter.

Я прочитал эту страницу: django-filter with django autocomplete light

но я все еще в замешательстве. У меня есть класс фильтра, подобный приведенному ниже, и я хочу использовать DAL в поле «имя разработчика»:

class DevListFil(django_filters.FilterSet):
    devname = django_filters.CharFilter(name='devname',lookup_expr='icontains')
    sn      = django_filters.CharFilter(name='sn',lookup_expr='icontains')
    devtype = django_filters.CharFilter(name='devtype',lookup_expr='icontains')
    class Meta:
        model = Device
        fields = ['devname','sn','devtype']

любая помощь или точка в правильном направлении, пожалуйста.


person rifaiz    schedule 09.11.2016    source источник


Ответы (1)


Фильтры — это просто абстракция поверх обычных полей формы Django. Любые аргументы, не применимые к фильтру, передаются в базовое поле. В этом случае все, что вам нужно сделать, это подключить виджет автозаполнения с фильтром. Вероятно, что-то вроде:

devname_url = '...'

class DevListFil(django_filters.FilterSet):
    devname = django_filters.CharFilter(name='devname', lookup_expr='icontains', widget=autocomplete.ModelSelect2(url=devname_url))
    sn      = django_filters.CharFilter(name='sn', lookup_expr='icontains')
    devtype = django_filters.CharFilter(name='devtype', lookup_expr='icontains')

    class Meta:
        model = Device
        fields = ['devname', 'sn', 'devtype']
person Sherpa    schedule 10.11.2016
comment
Спасибо, что помогли мне понять. Я поместил параметр виджета в класс формы, но ваш пример работает. - person rifaiz; 11.11.2016
comment
@Sherpa Я реализовал это именно так, но вместо поля автозаполнения я получаю пустое поле выбора. Вы сделали что-то особенное в шаблоне? - person OverflowingTheGlass; 08.09.2017
comment
@CameronTaylor вам может потребоваться включить носитель формы в свой шаблон. {{ filter.form.media }} - person Sherpa; 11.09.2017