gpt4 book ai didi

Django:根据外键获取多个项目的有效方法

转载 作者:行者123 更新时间:2023-12-02 02:22:36 24 4
gpt4 key购买 nike

这是一个例子:

模型.py

class Category(models.Model):
name = models.Charfield(max_length=120 blank=True, null=True, default=None)

class Product(models.Model):
category = models.Foreignkey(Category)

这是我之前做的:

products = [Product.objects.filter(category_id=i.id)[:6] for i in Category.objects.all()]

如何在不使用“for”的情况下有效获取每个类别包含 6 个产品的列表?

最佳答案

Postgres 有一种从子查询创建数组的非常好的方法。因此,如果您使用 Postgres,这将适合您。

from django.db.models import OuterRef, Subquery

class Array(Subquery):
template = 'ARRAY(%(subquery)s)'

product_sub = Product.objects.filter(category=OuterRef('pk'))

products = Category.objects.annotate(
product_list=Array(product_sub.values('name')[:6])
).values_list('product_list', flat=True)

这种方式效率更高:让我们与您的版本进行比较

您的版本:1 个类别查询 + 类别计数乘以 1 个产品查询。一个 for 循环。

我的版本:1 个查询。

关于Django:根据外键获取多个项目的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50599574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com