首页 > 解决方案 > 如何在 django 中缓存查询集

问题描述

我有三个模型。

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 模型。

标签: django-rest-framework

解决方案


推荐阅读