我有一个list_filter
有很多扇区。此列表位于页面右侧,太长。
我可以使用输入选择字段,因为我不能选择多个扇区吗?
我之前看过这个,截图,但我找不到这样做的方法。
编辑
我有一个自定义的FilterSpec而不是list_filter
答案 0 :(得分:1)
您可以编写自己的自定义FilterSpec(自定义管理列表过滤器)。
此功能尚未成为Django代码的一部分;计划用于1.2版本。您需要将此修补程序应用于Django代码:http://code.djangoproject.com/ticket/5833。
stackoverflow上有很多关于如何做到这一点的例子,例如:https://stackoverflow.com/a/1294952/342473。
答案 1 :(得分:0)
答案 2 :(得分:0)
您所说的长列表来自内置ListFilters的django / contrib / admin / templates / admin / filter.html中的默认模板“admin / filter.html”。
有几种方法可以自定义它:
全局覆盖'admin / filter.html'。如果选项计数达到一定限度,则渲染选择标记而不是ul标记。这会影响admin中的所有列表过滤器。 select标签应该具有onchange事件处理程序,如
< select ... onchange =“location.href = this.options [this.selectedIndex] .value”>
将特定ListFilter实例中的模板属性设置为自定义过滤器模板的名称。模板的内容类似于#1。这需要Django 1.4+。
答案 3 :(得分:0)
这是我解决它的方式(jQuery):
$('#changelist-filter ul').each(function(){
var maxlength = 10;
if ($(this).children().length > maxlength )
{
var list=$(this),
select=$(document.createElement('select')).insertBefore($(this).hide());
$('>li a', this).each(function(){
console.log($(this).parent().attr('class'));
var target=$(this).attr('target'),
option=$(document.createElement('option'))
.appendTo(select)
.val(this.href)
.attr('selected', $(this).parent().attr('class'))
.html($(this).html())
.click(function(){
if (target==='_blank'){
window.open($(this).val());
}
else{
window.location.href=$(this).val();
}
});
});
list.remove();
}
});