Получить элемент из Django аннотированного запроса с помощью Dynami c Функции базы данных - PullRequest
0 голосов
/ 26 апреля 2020

Я столкнулся с чем-то неожиданным, и я уверен, что это должно быть простое решение.

Я пытаюсь использовать функцию CUME_DIST() для аннотирования запроса django SQL. Эта часть работает нормально и дает мне правильный вывод.

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь извлечь конкретный c элемент из аннотированного набора запросов, используя .get(user=request.user), он вернет меня назад. правильный пункт, но аннотированный столбец, кажется, переоценивается. Я хочу получить элемент с тем же аннотированным значением, что и в исходном запросе .

Обратите внимание, что я могу получить к нему правильный доступ с помощью индексной нотации (например: annotated_queryset[10] дает правильный вывод для элемент с индексом 10), но я не уверен, с каким индексом будет выбран нужный элемент.

Пример моего кода:

        annotated_queryset = Profile.objects.annotate(score_cume=RawSQL("""
                 CUME_DIST() OVER (
                     ORDER BY score
                 )
        """, ()))

Выше приведен правильный набор запросов.

        user_profile = annotated_queryset.get(user=request.user)
        print("score cum : ", user_profile.score_cume)

Распечатка вышеупомянутого всегда дает 1.0, потому что (я полагаю) он оценивает score_cume по отношению к одному объекту, который он извлекает.

Как я могу извлечь этот объект с помощью request.user из исходный аннотированный набор запросов и сохранить аннотированное значение?

FWIW: я использую postgres с django

...