我正在尝试在客户查询集上预取按产品分组的订单行。是否可以使用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'
)
)
您可以执行嵌套预取以获取相关订单,并从那里获取相关的OrderLines:
customers = Customer.objects.prefetch_related(
Prefetch(
'order_customer',
queryset=Order.objects.prefetch_related(Prefetch(
'orderline_order',
queryset=OrderLine.objects.filter(**query)
))
)
)