答案 0 :(得分:4)
您可以尝试将dal_admin_filters
的Django自动完成式滤光片用于Django管理员
https://pypi.org/project/dal_admin_filters/
看起来可能正是您要寻找的
答案 1 :(得分:1)
虽然dal_admin_filters
似乎可以正常使用,但它已经有一段时间没有更新(2017)了,并且早于Django 2.0引入了自动完成字段。
如果我是您,我会很幸运地根据Django 2.0和dal_admin_filters
实现中公开的新自动完成端点来实现自己的SimpleListFilter
subclass。
答案 2 :(得分:0)
您可以尝试类似的方法。
注意:Gedas here的原始帖子
custom_filter.html
的新模板custom_filter.html
中。我包括两个不同的版本-一个带有单选,另一个带有多选。 custom_filter_single.html
{% load i18n %}
<script type="text/javascript">
var go_from_select = function(opt)
{ window.location = window.location.pathname + opt };
</script>
<h3>{{ title }}</h3>
<ul class="admin-filter-{{ title|cut:' ' }}">
{% if choices|slice:"4:" %}
<li>
<select style="width: 95%;"
onchange="go_from_select(this.options[this.selectedIndex].value)">
{% for choice in choices %}
<option{% if choice.selected %} selected="selected"{% endif %}
value="{{ choice.query_string|iriencode }}">{{ choice.display }}
</option>
{% endfor %}
</select>
</li>
{% else %}
{% for choice in choices %}
<li{% if choice.selected %} class="selected"{% endif %}>
<a href="{{ choice.query_string|iriencode }}">{{ choice.display }}</a>
</li>
{% endfor %}
{% endif %}
</ul>
custom_filter_multiple.html
使用select2 lib,可以对以下内容进行优化
{% load i18n %}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js">
</script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-
rc.0/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-
rc.0/js/select2.min.js"></script>
<script>
$(document).ready(function() {
$("#personnel").select2();
$("#personnel").change(function() {
var selected_vals = $('#personnel').val();
var selections = selected_vals.join().replace(/\?/g, '').replace(/\,/g,
'&');
window.location = window.location.pathname + "?" +selections;
});
});
</script>
<h3>{{ title }}</h3>
<ul class="admin-filter-{{ title|cut:' ' }}">
{% if choices|slice:"4:" %}
<li>
<select style="width: 95%;" class="js-example-basic-multiple"
multiple="multiple" id="personnel">
{% for choice in choices %}
<option
value="{{ choice.query_string|iriencode }}">{{ choice.display }}
</option>
{% endfor %}
</select>
</li>
{% else %}
{% for choice in choices %}
<li{% if choice.selected %} class="selected"{% endif %}>
<a href="{{ choice.query_string|iriencode }}">{{ choice.display }}</a>
</li>
{% endfor %}
{% endif %}
</ul>
在filters.py中创建一个名为CustomFilter
导入AllValuesFieldListFilter
类CustomFilter(AllValuesFieldListFilter): template ='admin / custom_filter_single.html'#使用适当的模板
现在像这样在admin.py
中使用上面的过滤器类
class SomeAdmin(admin.ModelAdmin):
list_filter = (('personnel_type', CustomDropDownFilter),)
#TIP: for custom filter labels, you can add verbose_name in
#models.py like this.
personnel_type = models.CharField(max_length=32, blank=True,
verbose_name="By Personnel Type")
一些截图。