如何使用相同的list_filter过滤多个DateField

时间:2013-11-26 12:06:03

标签: django django-admin django-filters

我正在尝试使用自定义list_filter来输入一个日期,然后,应用程序使用此日期来过滤几个字段(不仅仅是一个)。 我尝试了DateRangeFilter lib,但这是在两个输入日期之间过滤一个字段。

我需要的是过滤几个字段(date1,date2,date3 ...)只有一个输入日期:

MyModel.objects.filter(date1__gte=InputFilterDate, date2__gte=InputFilterDate,...)

我见过的所有其他自定义过滤器都必须设置可能的值列表,但我没有可能的值,我需要一个日历或类似的东西输入一个日期。

你知道任何类似于DateRangeFilter的库,还是一个神奇的Django API技巧?

1 个答案:

答案 0 :(得分:0)

您可以覆盖模板文件夹admin/<app_label>/<object_name>/change_list.html

中的change_list

然后尝试编辑过滤器块。您应该知道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 }}以包含管理员的更改列表代码,否则您将覆盖它