【问题标题】:how can I limit the count of returned objects from a related manager in django如何限制从 django 中相关管理器返回的对象的数量
【发布时间】:2019-12-07 23:14:27
【问题描述】:

我有两个模型类别和产品

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()查询类别时我使用的方式是有效的还是应该限制产品?

【问题讨论】:

  • 你能分享你模型的相关部分吗?
  • 另外,如果你能分享一下你是如何尝试的,我的意思是,你的views.py
  • 我更新了问题。

标签: python django django-models orm django-orm


【解决方案1】:

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

【讨论】:

  • 谢谢你,我预料到了,因为我没有找到对相关经理执行查询限制的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多