Замените выпадающий список начальной загрузкой с поиском по ключевым словам - PullRequest
0 голосов
/ 16 марта 2019

TL; DR; Я хотел бы заменить стандартный раскрывающийся список начальной загрузки в форме Django на bootstrap-select с ключевыми словами . Есть ли способ заставить {% render_field %} добавить data-tokens= к каждой опции?


У меня есть страница, где пользователь может пометить человека на фотографии. Соответствующая форма выглядит так:

class AddFaceForm(forms.ModelForm):
    class Meta:
        model = Face
        fields = ('person', ...)

и шаблон формы так:

<form id="face-add-form" action="{% url 'photos:faces' photo.name %}" method="post" class="form-inline" hidden>
{% csrf_token %}
{% render_field form.person class+="form-control dropdown" title="Person"%}
...

Это делает селектор человека стандартным раскрывающимся списком с параметрами, указанными как

<option value="139">XXX</option>
<option value="121">YYY</option>
...

Я могу заменить его выбором начальной загрузки, заменив class+="form-control dropdown" на class+="selectpicker" data-live-search="true". Однако параметры по-прежнему будут перечислены как со стандартным раскрывающимся списком. Для улучшения поиска мне нужно добавить data-tokens к каждому параметру, например ::

<option value="139" data-tokens="nickname-XXX">XXX</option>
<option value="121" data-tokens="nickname-YYY">YYY</option>

Есть ли способ сделать это без ручной визуализации формы?

1 Ответ

0 голосов
/ 17 марта 2019

Я пока не могу найти красивое решение, но, конечно, есть обходной путь без {% render_field %}:

<select name="person" title="Person" id="id_person" class="selectpicker" data-live-search="true" required>
    <option value="None"></option>
    {% for p in people %}
        <option value="{{ p.id }}" data-tokens="{{ p.all_names }}">{{ p.full_name }}</option>
    {% endfor %}
...