gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:58:03 24 4
gpt4 key购买 nike

我目前正在 Django Rest Framework 中制作一个 API,其中我正在过滤用户给出的日期(来自前端),然后我将其分组为几个月。我面临的问题是,如果开始日期小于分钟(创建日期),那么我得到的数据将被过滤,但我需要从开始日期到结束日期的分组时间(在一个范围内分组),如果几个月没有数据,那么数据库应该返回 0。

我知道SQL(我使用SQL作为我的数据库)首先计算where子句,然后计算group by,有没有办法先对数据进行分组,然后我们可以应用where子句。

例如:

Body - 我正在传递给 API

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

当前响应 - 我从 API 获取

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

正确响应 - 我想要数据

"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')

最佳答案

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

你写

q.annotate(
时间=TruncMonth('csrfcreateddate')
).values('时间')
。注释(
计数=计数('csrfrating')
).values('时间', '计数')

if elif block 之前的这一行 Django 首先注释然后过滤它。你可以看看here还有

关于python - Django:在数据库中不存在的两个日期范围之间进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48640060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com