Добавление заполнителя в форму в Django при использовании django-filter

Я разрабатываю веб-приложение, которое отображает html-таблицу с помощью django-tables2 и позволяет фильтровать эту таблицу с помощью django-filter. В моем html-шаблоне я могу просто поставить {% filter.form %}, и я получаю полную форму для фильтрации моей таблицы, что, на мой взгляд, действительно здорово и просто.

Тем не менее, я хотел бы добавить в эту форму заполнители, которые будут в плоском html (с использованием Bootstrap4), примерно так:

<div class="container">
    <form>
        <div class="form-group">
            <label for="email">Email:</label>
            <input type="email" class="form-control" id="email"
             placeholder="ENTER PLACEHOLDER HERE" name="email">
            </div>
       </form>
    </div>

(пример взят здесь: https://www.w3schools.com/bootstrap4/tryit.asp?filename=trybs_form_basic&stacked=h и отредактировано)

Как я могу добавить заполнитель при работе с django-фильтрами, и все, что я делаю, это добавляю % filter.form %} в свой шаблон?

Изменить: мой вопрос был наполовину заполнен. Ответ, данный @schwobaseggl, отлично подходит для большинства фильтров. Однако при наличии RangeFilter и двух полей (одно для максимального значения и одно для минимального значения), как установить два отдельных заполнителя? Можно поместить один и тот же заполнитель в оба поля, как описано здесь: Как поместить заполнитель в фильтр диапазона дат Django.


person deepNdope    schedule 25.12.2018    source источник


Ответы (2)


Когда вы определяете свой Filter, укажите атрибут placeholder через attrs kwarg конструктора widget:

# ...
from django.forms.widgets import TextInput, ...

class FooFilter(filters.FilterSet):
    bar = filters.CharFilter(..., widget=TextInput(attrs={'placeholder': 'baz'}))
person schwobaseggl    schedule 25.12.2018
comment
Отлично, у меня работает с CharFilters и подобными, спасибо. Как насчет RangeFilter, которые ведут к двум полям ввода на сайте? Когда я передаю это так, остается только одно поле, а второе исчезает. Однако я хотел бы иметь оба и написать что-то вроде min в 1-й и max во 2-й. - person deepNdope; 25.12.2018
comment
@ALA Вы должны выбрать соответствующий виджет для типа фильтра, см. django-filter.readthedocs.io/en/master/ref/. Я не знаю, как бы вы поступили с двумя разными заполнителями. Возможно, вам придется посмотреть исходный код/код шаблона виджета. - person schwobaseggl; 25.12.2018
comment
Я нашел этот пост, в котором объясняется, как поставить заполнитель для RangeFilter: stackoverflow.com/questions/36329019/. Однако он помещает один и тот же заполнитель для обоих полей. Недостающая часть по-прежнему будет заключаться в том, как установить в поле min, например. минимальный заполнитель и в максимальном поле максимальный заполнитель - person deepNdope; 26.12.2018

from django.forms.widgets import TextInput

class BikesFilter(django_filters.FilterSet):
    sell_price = django_filters.NumberFilter()
    sell_price__gt = django_filters.NumberFilter(field_name='sell_price', lookup_expr 
    ='gte', label='sell price min', widget=TextInput(attrs={'placeholder': 'min'}))
    sell_price__lt = django_filters.NumberFilter(field_name='sell_price', lookup_expr 
    = 'lte', label='sell price max', widget=TextInput(attrs={'placeholder': 'max'}))

   class Meta:
    model = Bike
    fields = (
               'sell_price'
             )

введите здесь описание изображения

person Vishal Singh    schedule 14.10.2020