银条。在 ModelAdmin 中按日期范围搜索

Posted

技术标签:

【中文标题】银条。在 ModelAdmin 中按日期范围搜索【英文标题】:SilverStripe. Search by date-range in ModelAdmin 【发布时间】:2017-07-15 09:58:17 【问题描述】:

我的 DataObject 中有日期属性。

如何在 ModelAdmin 中按日期范围搜索?

例如:“搜索日期大于 2007-13-01 且小于 2007-17-01 的所有项目” 或“搜索日期在 2007-13-01 和 2007-17-01 之间的所有项目”

目前我只能使用 GreaterTranFilter 或 LessThanFilter 进行搜索,但不能同时使用两者。

class MyObject extends DataObject 
    private static $db = [
        "Date" => "Date",
    ];
    private static $summary_fields = [
        "Date" => "Date",
    ];

    private static $searchable_fields = [
        "Date" => [
            "field" => "DateField",
            "filter" => "GreaterThanFilter",
            "title" => 'Date from ...'
        ],
    ];

另外搜索字段必须使用日历(日期选择器)

DateField:
  default_config:
    showcalendar: true

你能举例说明如何按日期范围搜索吗?

【问题讨论】:

一个快速的谷歌搜索告诉我gist.github.com/dljoseph/de44dce46b2194661381这可能对你有帮助 【参考方案1】:

有一个WithinRangeFilter,但如果您只使用配置,它不会让您走得太远。这是你真正需要在程序上实现的东西。

通过重载 getSearchContext() 添加范围过滤器,然后重载 getList() 并检查日期范围的 q 请求参数,并将它们应用于列表。

public function getSearchContext()

    $context = parent::getSearchContext();
    $context->getFields()->push(DateField::create('q[Start]','Start'));
    $context->getFields()->push(DateField::create('q[End]','End'));

    return $context;


public function getList()

    $list = parent::getList();
    $params = $this->getRequest()->requestVar('q');

    $filters = [];
    if(isset($params['Start'])) 
        $filters['Date:LessThanOrEqual'] = $params['Start'];
    
    if(isset($params['End'])) 
        $filters['Date:GreaterThanOrEqual'] = $params['End'];
    

    return $list->filter($filters);

【讨论】:

以上是关于银条。在 ModelAdmin 中按日期范围搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中按日期范围过滤记录?

如何在 Hive SQL 中按日期范围独家加入?

在mysql和php中按日期范围分组

在 Django admin 中按自定义日期范围过滤

9 月 1 日在 8 月 31 日之前在 Zeppelin 中按日期排序的条形图,请问如何解决?

Django网站管理--ModelAdmin