我有两个型号Category和Product
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)
想要的行为是返回带有的所有类别,每个类别应包含10种产品
我尝试返回所有类别而不限制产品返回的对象,然后在模板中使用了切片过滤器,但是我不确定这对于大规模是否有效,并且我不确定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()
查询类别时应该限制产品?
答案 0 :(得分:0)
是的,这是一种通常的方法。 Django的查询集是惰性的,在您将结果切片到模板中之后,将无法访问数据库,并且切片会(某种程度上)达到数据库级别。