django - 通过表嵌套预取

标签 django django-orm

我正在尝试预取客户查询集上按产品分组的订单行。是否可以使用 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/

相关文章:

python - Django 卡在应用巨大的迁移上

使用 docker 部署 Django - 创建 super 用户

Django 多数据库测试在拆卸后失败

Django查询集根据日期返回外键中每个项目的第一个

python - 限制每个用户对每本书的单一评分 : Django ORM

python - UnicodeDecodeError : 'ascii' codec can't decode byte 0xd1 in position 2: ordinal not in range(128)

django:如何将此 View 迁移到基于类的通用 View 等效项?

python - 如何在 Django 查询集中执行 OR 条件?

django - django 查询集中 isnull=True 与 =None

django - 尝试使用子查询计算时差时出错