如何限制 Django 中相关管理器返回对象的数量

how can I limit the count of returned objects from a related manager in django

我有两个模型类别和产品

class Category(models.Model):
    name = models.CharField(max_length=200,
                               db_index=True)
    slug = models.SlugField(max_length=200,
                            unique=True,)
    description = models.CharField(max_length=50,
                                      blank=True)



class Product(models.Model):
    category = models.ForeignKey(Category,
                                 related_name='products',
                                 on_delete=models.CASCADE)
    name = models.CharField(max_length=200,
                               db_index=True)
    description = models.TextField(blank=True)
    slug = models.SlugField(max_length=200, db_index=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    available = models.BooleanField(default=True)
    featured = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

想要的行为是 return 所有类别,每个类别应包含 10 个产品

我尝试 return 所有类别而不限制产品 returned 对象然后我在模板中使用切片过滤器,但我不确定这对大规模来说是否有效,我我不确定 Django 是否会延迟加载产品。 目前视图如下

def product_list(request):
    featured_products = Product.objects.filter(featured=True).all()
    categories = Category.objects.all()

    return render(request,
                  template_name='home/home.html',
                  context={'categories': categories,
                           'featured_products': featured_products})

我使用的方式是否有效,或者我应该在使用 Category.objects.all() 查询类别时限制产品?

是的,这是一种常用方法。 Django 的查询集是惰性的,在您将结果切片到模板之前不会访问数据库,并且切片会 - 有点 - 到数据库级别。