Как улучшить множественный запрос для нескольких графиков на одной странице

Я хотел бы увеличить скорость загрузки страницы для моего сайта

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

Вопрос: как я могу улучшить свою кодировку для увеличения скорости запроса?

View.py

    def get_queryset(self):
        dateRange = self.request.query_params.get('dateRange')
        if dateRange is not None:
            datestart = datetime.datetime.strptime(dateRange.split('-')[0], "%Y%m%d").strftime("%Y-%m-%d")
            dateend = datetime.datetime.strptime(dateRange.split('-')[1], "%Y%m%d").strftime("%Y-%m-%d")
        else:
            year_today = str((datetime.datetime.now().date() - datetime.timedelta(days=1)).year)
            week_today = str((datetime.datetime.now().date() - datetime.timedelta(days=1)).isocalendar()[1] - 1)
            datestart = datetime.datetime.strptime(year_today + '-W' + week_today + '-1', "%Y-W%W-%w")
            dateend = datetime.datetime.strptime(year_today + '-W' + week_today + '-0', "%Y-W%W-%w")


        queryset = ranking_page_data.objects.filter(Date_start__range=(datestart, dateend),
                                                   Period_Type="daily",
                                                   Order_Type="Gross Order").values('Country').annotate(
            Sales_Euro=Sum('Sales_Euro'),
            Orders=Sum('Orders'),
            Unit=Sum('Unit'),
            buyers=Sum('buyers'),
            Visitors=Sum('Visitors'),
            Pageview=Sum('Pageview'),
            Conversion_Rate=Avg('Conversion_Rate')).order_by('-Sales_Euro')

        queryset1 = ranking_page_data.objects.filter(Date_start__range=(datestart, dateend),
                                                   Period_Type="daily",
                                                   Order_Type="Gross Order").values('Platform').annotate(
            Sales_Euro=Sum('Sales_Euro'),
            Orders=Sum('Orders'),
            Unit=Sum('Unit'),
            buyers=Sum('buyers'),
            Visitors=Sum('Visitors'),
            Pageview=Sum('Pageview'),
            Conversion_Rate=Avg('Conversion_Rate')).order_by('-Sales_Euro')

        queryset2 = ranking_page_data.objects.filter(Date_start__range=(datestart, dateend),
                                                   Period_Type="daily",
                                                   Order_Type="Gross Order").values('Country','Platform').annotate(
            Sales_Euro=Sum('Sales_Euro'),
            Orders=Sum('Orders'),
            Unit=Sum('Unit'),
            buyers=Sum('buyers'),
            Visitors=Sum('Visitors'),
            Pageview=Sum('Pageview'),
            Conversion_Rate=Avg('Conversion_Rate')).order_by('-Sales_Euro')

    return queryset,queryset1,queryset2

и model.py

class ranking_page_data(models.Model):
    ID = models.IntegerField()
    Specific_Identity = models.TextField()
    Country = models.TextField()
    Platform = models.TextField()
    Brand = models.TextField()
    Period_Type = models.TextField()
    Date_start = models.DateField()
    Date_end = models.DateField()
    Order_Type = models.TextField()
    Date = models.TextField()
    Time = models.TextField()
    Conversion_Rate = models.FloatField()
    Orders = models.IntegerField()
    buyers = models.IntegerField()
    Pageview = models.IntegerField()
    Unit = models.IntegerField()
    Visitors = models.IntegerField()
    Exchange_rate = models.FloatField()
    Sales_Euro = models.FloatField()

    class Meta:
        db_table = "web_ranking"

Спасибо за поддержку

Вернуться на верх