Аннотировать нумерованный список элементов из диапазона, определенного другой аннотацией - PullRequest
0 голосов
/ 05 марта 2020

Django ORM / PostgreSQL

Основная цель написанного ниже запроса - создать список пользователей, которые создали наибольшее количество заказов. Мне удалось создать простой лог c, который определяет баллы лояльности на основе общего количества заказов, созданных конкретным пользователем, в сочетании с максимальным счетом, который был записан в системе:

queried_orders = Order.objects.all()
queried_orders = queried_orders.annotate(number_of_completed_orders=Count('*')).values('number_of_completed_orders')
maxiimum_number_of_orders = queried_orders.aggregate(
    maximum_number_of_completed_orders=Max('number_of_completed_orders')
)
queried_orders = queried_orders.order_by('Order_User').annotate(
    loyalty_points=Case(
        When(
            Q(
                Q(number_of_completed_orders__gt=0)
            ),
            then=5*F('number_of_completed_orders')/maxiimum_number_of_orders['maximum_number_of_completed_orders']
        ),
        output_field=DecimalField(),
    )
)

Наборы данных выглядят следующим образом:

[{'number_of_completed_orders': 15, 'loyalty_points': Decimal('75')}, 
{'number_of_completed_orders': 4, 'loyalty_points': Decimal('20')}, 
{'number_of_completed_orders': 6, 'loyalty_points': Decimal('30')}, 
{'number_of_completed_orders': 88, 'loyalty_points': Decimal('440')}

Сейчас я пытаюсь немного изменить это поле и создать диапазон чисел между: 0 и F ('loyalty_points')

annotate(enumerated_list_of_elements=FUNCTON_NAME(0:F('loyalty_points')))

но я не могу найти правильное PostgreSQL имя функции для этой операции. Вопрос в том, есть ли такая функция, или эта модификация должна быть сделана с использованием Python?

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