【问题标题】:How to filter several DateFields with the same list_filter如何使用相同的 list_filter 过滤多个 DateField
【发布时间】:2013-12-11 13:39:35
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: django django-admin django-filters


    【解决方案1】:

    您可以覆盖模板文件夹中的 change_list 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 }} 以包含管理员的更改列表代码,否则您将覆盖它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多