我正在尝试使用自定义list_filter来输入一个日期,然后,应用程序使用此日期来过滤几个字段(不仅仅是一个)。 我尝试了DateRangeFilter lib,但这是在两个输入日期之间过滤一个字段。
我需要的是过滤几个字段(date1,date2,date3 ...)只有一个输入日期:
MyModel.objects.filter(date1__gte=InputFilterDate, date2__gte=InputFilterDate,...)
我见过的所有其他自定义过滤器都必须设置可能的值列表,但我没有可能的值,我需要一个日历或类似的东西输入一个日期。
你知道任何类似于DateRangeFilter的库,还是一个神奇的Django API技巧?
答案 0 :(得分:0)
您可以覆盖模板文件夹admin/<app_label>/<object_name>/change_list.html
然后尝试编辑过滤器块。您应该知道Django change_list过滤基于请求查询字符串,您可以使用GET方法创建一个包含具有特定名称的输入以便能够过滤的表单。我在上面的代码中添加了一个jquery脚本,它根据字段名称数组生成输入,你的代码应该是这样的:
{% extends "admin/change_list.html" %}
{% block filters %}
{{ block.super }}
<form action="" method="get" id='date_filter_form'>
<input type="text" class="datepicker" id="date_picker">
</form>
{% endblock %}
{% block extrahead %}
{{ block.super }}
<script type="text/javascript">
(function($) {
var fields = ['date1__gte', 'date2__gte'];
$(document).ready(function($) {
$("#date_filter_form").submit(function(){
for (var i = 0; i < fields.length; i++) {
$('#date_picker').clone().attr(
'name', fields[i]).appendTo($(this));
};
return true;
});
});
})(django.jQuery);
</script>
{% endif %}{% endif %}
{% endblock %}
您可以集成任何您喜欢的自定义jquery datepicker小部件,只需导入js和css并在ready函数中添加初始化。
查看change_list.html code以使用正确的阻止名称添加您的css文件,并且不要忘记致电{{ block.super }}
以包含管理员的更改列表代码,否则您将覆盖它