使用以下模型是否可以获取Category
对象并预取OrderLine
,以便category.orderlines.all()
可以访问它?
class Category(models.Model):
name = models.CharField(...)
class Product(models.Model):
category = models.ForeignKey(Category, related_name='products', ...)
name = models.CharField(...)
price = models.DecimalField(...)
class OrderLine(models.Model):
product = models.ForeignKey(Product, related_name='orderlines', ...)
我知道您可以通过产品进行嵌套预取,但是我想直接从OrderLine
访问Category
对象,而不是通过Product
from django.db.models import Prefetch
categories = Category.objects.prefetch_related(Prefetch(
'products__orderlines',
queryset=OrderLine.objects.filter(...)
))
for category in categories:
for product in category.products.all():
for line in product.orderlines.all():
...
所需用法:
for category in categories:
for line in category.orderlines.all():
...
更新
添加to_attr='orderlines'
会导致:
ValueError:to_attr = orderlines与产品模型上的字段冲突。
更改属性名称to_attr='lines'
不会导致错误,但是不会将属性添加到Category
对象中。它会预取Product
,然后向每个产品添加lines
属性。