Как кэшировать набор запросов в django - PullRequest
1 голос
/ 26 марта 2020

У меня три модели.

class ManagerOrder(models.Model):
    order = models.OneToOneField(Order, on_delete=models.CASCADE, primary_key=True)
    kam = models.ForeignKey(KeyAccountManager, on_delete=models.PROTECT)


    @property
    def quantity(self):
        return OrderData.objects.filter(order_id = self.order.id) \
                .aggregate(Sum('quantity'))['quantity__sum']


class Order(models.Model):
order_data = models.ManyToManyField('anotherapp', through='OrderData', related_name='+')

class OrderData(models.Model):
    quantity = models.FloatField()

Теперь я пытаюсь получить общее количество для каждого заказа. Но он снова и снова вызывает модель OrderData (проблема N + 1). Я читал о prefetch_related и ставлю то же самое на мой взгляд.

 queryset = models.KeyAccountManagerOrder.objects.all().prefetch_related('order__order_data')

, но все равно он снова и снова вызывает модель OrderData.

...