【问题标题】:How to limit prefetch_related data in django如何在 django 中限制 prefetch_related 数据
【发布时间】:2020-02-29 11:14:38
【问题描述】:

我有两个表品牌和一个产品。每个品牌都有多种产品。

所以。我使用 prefetch_related 以最低产品价格获取特定品牌的相关产品。但问题是当我有 2 个价格相同的产品时,它会同时选择两条记录,那么如何限制呢?

alternatives_data = Brand.objects.filter(category__category_slug = category_slug).prefetch_related(
    Prefetch('products', queryset=Product.objects.annotate(
                min_brand_price=Min('brand__products__product_price')
            ).filter(
                product_price=F('min_brand_price')
            ).order_by('product_id')))

我尝试了所有方法,但没有任何效果!

【问题讨论】:

  • 你需要在查询集中使用切片[0]它很有用
  • no slicing 在此不起作用。
  • 不,它只适用于 prefetch_related 的普通过滤器不起作用。
  • 当有两种产品时,如何确定使用哪一种?

标签: django django-models django-views django-orm


【解决方案1】:

要防止查询返回在特定列中重复的多条记录,请使用distinct 方法。
在您的情况下,将 .distinct('price') 添加到预取内的 Product 查询集中。

但是有一个警告:它仅在 PostgreSQL 上受支持。

Documentation

【讨论】:

  • 不,我正在使用 mysql
猜你喜欢
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 2016-11-28
  • 2017-11-27
  • 2015-06-08
  • 2020-08-27
  • 2012-06-10
  • 1970-01-01
相关资源
最近更新 更多