Django orm如何获取数组字段的第一个元素的和?

2024-04-16 16:58:56 发布

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

对于postgres,我有以下django模型。假设metric_vals是非空数组。有没有办法得到metric_vals的所有第一个值之和

from django.db import models
import uuid
from django.contrib.postgres.fields import ArrayField

class SampleModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    metric_vals = ArrayField(models.FloatField(null=False), null=False, default=list)

我尝试了以下操作,但出现了错误:

from django.db.models import F
from django.db.models import Sum

SampleModel.objects.aggregate(Sum('metric_vals__0'))

django.db.utils.ProgrammingError: function sum(double precision[]) does not exist


Tags: djangofromimportfalsedefaultdbuuidmodels
1条回答
网友
1楼 · 发布于 2024-04-16 16:58:56

像这样的桌子

create table metrics_table
(
    id serial not null constraint metrics_pk primary key,
    metrics double precision[]
);

SQL查询

select sum(metrics[1]) from metrics_table;

工作

您可能需要^{} annotation

基于这一点,在我的脑海里

SampleModel.objects
  .annotate(first_metric=RawSQL('metric_vals[1]'))
  .aggregate(first_metric_sum=Sum('first_metric'))

也许能奏效

相关问题 更多 >