我目前正在Django-Rest框架中制作一个API,在这个API中,我过滤用户给出的日期(来自前端),然后我将在几个月内对其进行分组。如果我所需要的数据是从开始日期到结束日期的最小值,那么我应该返回一个从开始到结束日期的数据。在
我知道SQL(我使用SQL作为数据库)首先计算where子句,然后在groupby之后,有没有一种方法可以先将数据分组,然后应用where子句。在
例如:
Body
-我正在传递给API
{
"StartDate":"2017-06-01",
"EndDate":"2017-08-08"
}
Current Response
-我正在从我的API获取
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')
是的,有一种方法可以先进行注释,然后过滤它。在
你写的
q.annotate( Time=TruncMonth('csrfcreateddate') ).values('Time') .annotate( Count=Count('csrfrating') ).values('Time', 'Count')
在您的
if elif
块之前的这一行首先进行注释,然后过滤它。 你也可以看here相关问题 更多 >
编程相关推荐