我正在尝试预取客户查询集上按产品分组的订单行。是否可以使用 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'
)
)
最佳答案
您可以进行嵌套预取以获取相关订单并从那里获取相关订单行:
customers = Customer.objects.prefetch_related(
Prefetch(
'order_customer',
queryset=Order.objects.prefetch_related(Prefetch(
'orderline_order',
queryset=OrderLine.objects.filter(**query)
))
)
)
关于django - 通过表嵌套预取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55810799/