Django выполнить деление в выражении суммы аннотации и вернуть как float - PullRequest
0 голосов
/ 10 июля 2020

У меня есть такие данные:

some_foreign_key     date               rank
1                    2020-07-10 20:15   23
1                    2020-07-10 20:15   2
2                    2020-07-10 21:15   9
3                    2020-07-10 21:15   12
1                    2020-07-10 21:15   400
...

Я хотел бы суммировать 1 / ранг, сгруппировать его по дате и отфильтровать по некоторому значению из foreign_key. Необработанный sql будет примерно таким: SELECT SUM(1/rank) FROM ... WHHERE [foreign key constraint] GROUP BY date

Я пробовал следующее в Django:

data = MyModel.objects.values('date').annotate(
    score=Sum(1/F('rank'), filter=Q(myforeignobject__bla__bla__name="Some name"))
)

Сработало немного, но результат - целое число, которое не сработает, так как числа обычно будут очень маленькими. Я также пробовал следующее, но все равно получаю целое число:

data = MyModel.objects.values('date').annotate(
    score=Cast(Sum(1/F('rank')), FloatField())
)

Обратите внимание, я не хочу суммировать ранг, а затем делить его на единицу, он должен быть разделен на каждую запись, поскольку он в противном случае не даст того же результата.

EDIT

Если я изменю свою модель, чтобы использовать FloatField вместо IntegerField для значения ранга, я получу желаемый результат , однако это не идеальное решение.

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