2016-11-09 2 views
0

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

Я прочитал эту страницу: 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'] 

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

ответ

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'] 
+0

Спасибо, что помогли мне разобраться. Я поместил параметр виджета в класс формы, но ваш пример работает. – rifaiz

+0

@Sherpa Я реализовал его так же, как это, но я получаю пустой поле выбора вместо окна автозаполнения. Сделали ли вы что-нибудь особенное в шаблоне? –

+0

@CameronTaylor вам может потребоваться включить носитель формы в ваш шаблон. '{{filter.form.media}}' – Sherpa