首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据品牌对产品进行分组&在django中获取最低价格产品

如何根据品牌对产品进行分组&在django中获取最低价格产品
EN

Stack Overflow用户
提问于 2020-03-14 17:36:28
回答 1查看 73关注 0票数 1

我有两张桌子,一个是品牌,另一个是产品,现在产品有1个国外的brand_id。

1个品牌有多个不同价格的产品。

现在,问题是我只想为每个品牌获取1个产品,不超过1个,并且1个产品是基于最低价格获取的。如何在Django ORM中实现它?

注意:如果一个品牌没有产品,那么这个品牌就不应该被获取!

在这里,我尝试了什么,但它不能很好地工作。

代码语言:javascript
运行
复制
def price_chart(request, category_slug):
    labels = []
    price_data = []
    price_analysis_data = Product.objects.filter(brand__category__category_slug = category_slug).values('brand__brand_name').annotate(
       Min('product_price')
    ).order_by('-product_price')
    for data in price_analysis_data:
        labels.append(data['brand__brand_name'])
        price_data.append(data['product_price'])
    return JsonResponse(data={
        'labels': labels,
        'price_data': price_data,
    })

请给我提个好的解决方案!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-14 18:26:35

我们可以在品牌(递增)和价格(递减)上订购:

代码语言:javascript
运行
复制
brand_name_to_min_price_map = dict(
    Product.objects.filter(
        brand__category__category_slug=category_slug,
    ).order_by(
        'brand__brand_name', '-product_price',
    ).values_list(
        'brand__brand_name', 'product_price',
    )
)

因为我们将值列表放在一个字典中,所以它将创建一个键值对(品牌名称到价格)。如果品牌名称重复,后面的值将覆盖之前的值。在这种情况下,对于每个品牌,将使用列表中最后出现的产品价格。由于我们按照每个品牌内产品价格的递减顺序对结果进行了排序,因此最后的价格始终是最小的价格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60681403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档