【发布时间】:2020-10-27 03:58:15
【问题描述】:
我有一个这样的模型:
class CPUReading(models.Model):
host = models.CharField(max_length=256)
reading = models.IntegerField()
created = models.DateTimeField(auto_now_add=True)
我正在尝试获得如下所示的结果:
{
"host 1": [
{
"created": DateTimeField(...),
"value": 20
},
{
"created": DateTimeField(...),
"value": 40
},
...
],
"host 2": [
{
"created": DateTimeField(...),
"value": 19
},
{
"created": DateTimeField(...),
"value": 10
},
...
]
}
我需要按主机分组并按created 排序。
我尝试了很多东西,包括使用values() 和annotate() 来创建GROUP BY 语句,但我认为我必须遗漏一些东西,因为为了使用GROUP BY,我似乎需要使用一些我不想做的聚合函数。我需要reading 字段的实际值,该字段按主机字段分组并按创建的字段排序。
这或多或少是任何图表库需要数据的方式。
我知道我可以使用 python 代码或原始 sql 查询来实现它,但我更喜欢使用 django ORM,除非它明确禁止这种查询。
【问题讨论】:
-
在搞砸了一点之后,我认为 ORM 中没有任何内容,如果您希望在数据库中完成此操作,则需要使用原始查询。我认为如果你的数据库被规范化,你可能会更轻松,即你有一个
Host模型。 -
我已经基于此添加了一个答案,以防它对您有用,但如果它不起作用,它可能对其他人有用。
-
您能展示一下您认为会创建此数据结构的 SQL 查询吗? GROUP BY 只会为每个结果行返回一行读数...
标签: python python-3.x django django-orm