如何根据品牌分组产品并在Django中获取最低价产品

问题描述 投票:1回答:1

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

1个品牌以不同的价格提供多种产品。

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

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

这里,我尝试过,但是效果不佳。

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,
    })

请向我建议一个好的解决方案!

django django-models django-views django-orm
1个回答
0
投票

我们可以同时订购品牌名称(价格递增)和价格(价格递减):

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',
    )
)

由于我们将值列表放入字典中,因此将创建键值对(品牌名称与价格)。如果品牌名称重复,则后面的值将覆盖以前的值。在这种情况下,将使用列表中最后出现的每个品牌的产品价格。因为,我们按照每个品牌中产品价格的降序排列结果,所以最后的价格将始终是最低价格。

© www.soinside.com 2019 - 2024. All rights reserved.