queryset注释中的动态字段名

2024-05-14 18:07:23 发布

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

我需要用传入变量值重命名输出字段名。有一个功能:

def metric_data(request, test_id, metric):
    metric_name = metric
    data = ServerMonitoringData.objects. \
        filter(test_id=test_id). \
        annotate(timestamp=RawSQL("((data->>%s)::timestamp)", ('timestamp',))).\
        annotate(metric=RawSQL("((data->>%s)::numeric)", (metric,))). \
        values('timestamp', "metric")

因此,在这种情况下,无论变量度量值是什么值,输出都是这样的:

^{pr2}$

我需要一个键名等于metric变量的输出(如果metric=='CPU\u iowait'):

{"timestamp": "0:31:02", "CPU_iowait": "8.82414500398"}

试图用这样的方法:

    metric_name = metric
...
    annotate(metric_name=F('metric')).\
    values('timestamp', metric_name)

但当存在“metric_name”时,它正在尝试查找“CPU\u iowait”列。 那么有没有办法把字段名作为变量传递呢?在


Tags: nametest功能iddatadefcpumetric

热门问题