Частично аннотировать django queryset - PullRequest
0 голосов
/ 16 мая 2019

У меня есть запрос, который выглядит так

TrendData.objects.filter(owner__trend_type__mnemonic='posts').filter(
            date_trend__date__range=[date_from, date_to]).order_by(sort_by)[0: 100].values(
        'owner__name',
        'owner_id',
        'owner__link',
    ).annotate(
        owner_count=Count('owner_id')).annotate(views=Sum('views'), views_u=Sum('views_u'),
                                                likes=Sum('likes'),
                                                shares=Sum('shares'),
                                                interaction_rate=Sum('interaction_rate'),
                                                mean_age=Sum('mean_age')
                                                )

Раньше было хуже, однако я заметил, что аннотация суммирует ВСЕ значения в наборе запросов, а не ограниченный набор запросов, который я установил перед аннотацией.

Можно ли комментировать только частично, сумму я ограничил. Мой RAW-запрос выглядит так

'SELECT "api_trenddata"."id", "api_trenddata"."owner_id",  
 "api_trenddata"."views", "api_trenddata"."views_u",  
 "api_trenddata"."likes", "api_trenddata"."shares",  
 "api_trenddata"."interaction_rate", "api_trenddata"."mean_age",  
 "api_trenddata"."source_id", "api_trenddata"."date_trend",  
 SUM("api_trenddata"."views") AS "views", SUM("api_trenddata"."views_u") AS "views_u",  
 SUM("api_trenddata"."likes") AS "likes", SUM("api_trenddata"."shares") AS "shares", SUM("api_trenddata"."interaction_rate") AS  
 "interaction_rate", SUM("api_trenddata"."mean_age")  
 AS "mean_age" FROM "api_trenddata" INNER JOIN "api_owner" ON  
 ("api_trenddata"."owner_id" = "api_owner"."id") INNER JOIN  
 "api_trendtype" ON ("api_owner"."trend_type_id" =  
 "api_trendtype"."id") 
 WHERE ("api_trendtype"."mnemonic" = posts   AND("api_trenddata"."date_trend" AT TIME ZONE \'UTC\')::date BETWEEN 2019 04-05 AND 2019-04-06) GROUP BY "api_trenddata"."id"'  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...