У меня есть такие данные:
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 для значения ранга, я получу желаемый результат , однако это не идеальное решение.