通过表嵌套预取

问题描述 投票:0回答:1

我正在尝试在客户查询集上预取按产品分组的订单行。是否可以使用Django ORM预取直通表,还是应该以不同的方式进行此操作?

class Customer(models.Model):
    ...

class Order(models.Model):
    customer = models.ForeignKey(Customer, related_name='%(class)s_customer')
    lines = models.ManyToManyField(
        Product,
        through='OrderLine'
        through_fields=('order', 'product')
    )
    ...

class OrderLine(model.Model):
    product = models.ForeignKey(Product, related_name='%(class)s_product')
    order = models.ForeignKey(Order, related_name='%(class)s_order')

以下不起作用,因为customer不是OrderLine模型上的字段

customers = Customer.objects.all().prefetch_related(
    Prefetch(
        'order_customer',
        queryset=OrderLine.objects.filter(**query),
        to_attr='order_lines'
        )
    )
django django-orm
1个回答
1
投票

您可以执行嵌套预取以获取相关订单,并从那里获取相关的OrderLines:

customers = Customer.objects.prefetch_related(
    Prefetch(
        'order_customer',
        queryset=Order.objects.prefetch_related(Prefetch(
            'orderline_order',
            queryset=OrderLine.objects.filter(**query)
        ))
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.