使用关键字搜索将下拉菜单替换为bootstrap-select

时间:2019-03-15 22:59:14

标签: django-forms django-templates bootstrap-select

TL; DR; ,我想用bootstrap-select with keywords替换Django表单中的标准引导程序下拉列表。是否有办法使{% 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"来用bootstrap-select替换它。但是,这些选项仍将与标准下拉列表一起列出。为了增强搜索效果,我需要在每个选项中添加data-tokens,例如:

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

是否有一种无需手动呈现表单的方法?

1 个答案:

答案 0 :(得分:0)

我还没有找到漂亮的解决方案,但是如果没有{% 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 %}