Django:在数据库中不存在的两个日期范围之间分组

2024-04-28 03:25:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在Django-Rest框架中制作一个API,在这个API中,我过滤用户给出的日期(来自前端),然后我将在几个月内对其进行分组。如果我所需要的数据是从开始日期到结束日期的最小值,那么我应该返回一个从开始到结束日期的数据。在

我知道SQL(我使用SQL作为数据库)首先计算where子句,然后在groupby之后,有没有一种方法可以先将数据分组,然后应用where子句。在

例如:

Body-我正在传递给API

{
    "StartDate":"2017-06-01",
    "EndDate":"2017-08-08"
}

Current Response-我正在从我的API获取

^{pr2}$

Correct Response-我想要从数据

"data": [
        {
            "key": "Count",
            "bar": true,
            "values": [
                [
                    "2017-06-01T00:00:00",
                    1496255400000,
                    0
                ],
                [
                    "2017-07-01T00:00:00",
                    1498847400000,
                    0
                ],
                [
                    "2017-08-01T00:00:00",
                    1501545600000,
                    1
                ]
            ]
        }
    ]

Django ORM查询:

q=ConsumerServicerequestFeedback.objects.values_list('csrfrating').filter(status)

    if len(StartDate) != 0 and len(EndDate) == 0:
        StartDate = datetime.strptime(StartDate, '%Y-%m-%d')
        next_day = StartDate + timedelta(1)
        q = q.filter(csrfcreateddate__range=[StartDate, next_day])
    elif len(StartDate) != 0 and len(EndDate) != 0:
        q = q.filter(csrfcreateddate__range=[StartDate, EndDate])
    elif len(StartDate) == 0 and len(EndDate) != 0:
        EndDate = datetime.strptime(EndDate, '%Y-%m-%d')
        q = q.filter(csrfcreateddate__lte=EndDate)

q.annotate(Time=TruncMonth('csrfcreateddate')).values('Time').annotate(Count=Count('csrfrating')).values('Time', 'Count')

Tags: and数据djangoapisqllentimecount
1条回答
网友
1楼 · 发布于 2024-04-28 03:25:55

是的,有一种方法可以先进行注释,然后过滤它。在

你写的

q.annotate( Time=TruncMonth('csrfcreateddate') ).values('Time') .annotate( Count=Count('csrfrating') ).values('Time', 'Count')

在您的if elif块之前的这一行首先进行注释,然后过滤它。 你也可以看here

相关问题 更多 >