django orm как получить сумму первого элемента поля массива? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть следующая django модель для postgres. Предположим, 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

1 Ответ

0 голосов
/ 23 апреля 2020

Для таблицы типа

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

работает запрос SQL

select sum(metrics[1]) from metrics_table;

.

Возможно, вам понадобится аннотация RawSQL .

Исходя из этого, на макушке моей головы что-то вроде

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

может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...