Подтвердить что ты не робот

Вычитание двух аннотированных столбцов

Мне нужно иметь возможность сортировать по совокупности двух аннотированных столбцов

Итак, я хотел бы сделать что-то вроде этого:

c = c.annotate(metric=Sum('results__metric'))
c = c.annotate(metric_prior=Sum('results__metric_prior'))
c = c.annotate(variance=F('metric')-F('metric_prior')) #doesn't work, for demonstrative purposes only

а затем:

c = c.order_by('variance')

Кто-нибудь знает, как выполнить что-то вроде выше?

4b9b3361

Ответ 1

На самом деле,

c = c.annotate(variance=F('metric')-F('metric_prior'))

работает так, как вам бы хотелось начиная с Django 1.8.

Ответ 2

Ticket существует уже более 4 лет (к 2014 году), но это может быть выполнено с помощью небольшого запроса .extra() например:

items = MyModel.objects.extra(
    select = {'variance': 'SUM(relatedModel__someField) - SUM(relatedModel__someField)'},
)

Да, это может быть немного непредсказуемо для разных СУБД. Но если вы ограничиваете синтаксис внутри до очень распространенного SQL, он должен работать более или менее везде.