【发布时间】:2020-05-30 21:00:40
【问题描述】:
我有一个 django(DRF) 应用程序,我在其中存储基于 API 响应的周期性时间序列数据。这是我的 模型.py
# Model to store the Alexa API Data
class Alexa(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
extra = jsonfield.JSONField(null=True)
rank = models.PositiveIntegerField(default=0, null=True)
我正在使用 django-filters 根据范围(__lte,__gte)查询数据。
像/api/alexa/?created_at__lte=2020-02-14T09:15:52.329641Z一样返回2020-02-14T09:15:52.329641Z之前创建的所有数据
[
{
"id": 1,
"created_at": "2020-02-03T19:30:57.868588Z",
"extra": "{'load_time': 00, 'backlink': 0}",
"rank": 0
},
...
]
有没有办法构建一个端点,根据我传递的查询参数返回按天、周、月和年分组的聚合数据。例如,
/api/alexa/?created_at__lte=2020-02-14T09:15:52.329641Z&group_by=month 会返回
[
{
"created_at": "2020-01-01T00:00:00.000000Z",
"extra": "{'load_time': 00, 'backlink': 0}", <- Aggregated Data
"rank": 0 <- Aggregated Data
},
{
"created_at": "2020-02-01T00:00:00.000000Z",
"extra": "{'load_time': 00, 'backlink': 0}", <- Aggregated Data
"rank": 0 <- Aggregated Data
},
]
这是我当前的views.py
class AlexaViewSet(viewsets.ModelViewSet):
queryset = Alexa.objects.all()
filter_fields = {'created_at' : ['iexact', 'lte', 'gte']}
http_method_names = ['get', 'post', 'head']
我见过几个 sn-ps 进行聚合,但没有一个完全满足我的要求,也没有给我关于这个主题的完整概念。
我是 Django 的新手,并且一般都在构建分析仪表板,如果有任何其他方式可以在前端图表中表示此类时间序列数据以供消费,我也将不胜感激您的建议。
编辑: 这是我的serializer.py
class AlexaSerializer(serializers.ModelSerializer):
class Meta:
model = Alexa
fields = '__all__'
【问题讨论】:
标签: python django django-rest-framework django-orm django-filters