如何在每个日期的两个日期范围之间获取obj [英] How can get obj between two date range for each date

查看:111
本文介绍了如何在每个日期的两个日期范围之间获取obj的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

根据我的模型事件

 | id |  name  |    start_date       |      end_date       |
   1    Event1  2018-09-14 14:22:00     2018-09-15 14:22:00
   2    Event2  2018-09-15 14:22:00     2018-09-15 15:22:00

我需要返回group_by日期,如果事件持续时间(结束日期,开始日期)需要2天所以我需要在两天内将他退回两次,所有这些都应按日期排序。
因此响应应如下所示:

I need to return response group_by date and If Event duration (end_date, start_date) took 2 days so i need return him twice in two days and this all should be order by date. So response should look like this:

    {
      "2018-09-14": [
          {
            "id": 1,
            "name": "Event1",
            "start_date": "2018-09-14 14:22:00",
            "end_date": "2018-09-15 14:22:00",
        }],
        "2018-09-15": [{
            "id": 1,
            "name": "Event1",
            "start_date": "2018-09-14 14:22:00",
            "end_date": "2018-09-15 14:22:00",
        },
        {
            "id": 2,
            "name": "Event2",
            "start_date": "2018-09-15 14:22:00",
            "end_date": "2018-09-15 15:22:00",
        }]
     }

我该怎么做?

推荐答案

好。我为此找到了决定

1)首先,我找到了为此所需的SQL

1) First i find SQL that i need for this

"SELECT DISTINCT generate_series(start_date::date, end_date::date, '1 day'::interval) AS dates, * FROM api_event ORDER BY dates")

2)其次,我在Django ORM上编写此代码:

2) Second i write this on Django ORM:

Event.objects.annotate(dates=Func(F('start_date'), F('end_date'), Value('1 day'), function='generate_series')).all()

所以我得到了我想要的列表:

So i get list that i want:

[{
    "id": 1,
    "name": "Event1",
    "dates": "2018-09-14",
    "start_date": "2018-09-14 14:22:00",
    "end_date": "2018-09-15 14:22:00"
}, {
    "id": 1,
    "name": "Event1",
    "dates": "2018-09-15",
    "start_date": "2018-09-14 14:22:00",
    "end_date": "2018-09-15 14:22:00"
}, {
    "id": 2,
    "name": "Event2",
    "dates": "2018-09-15",
    "start_date": "2018-09-15 14:22:00",
    "end_date": "2018-09-15 15:22:00"
}]

此回复对我来说很好。

这篇关于如何在每个日期的两个日期范围之间获取obj的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆