如何根据品牌对产品进行分组并在 django 中获取最低价格产品
How to Group product based on brand & fetch min price product in django
我有两个table一个是品牌另一个是产品现在产品有1个国外的brand_id。
1 个品牌有多种价格不同的产品。
现在,问题是我只想为每个品牌提取 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,
})
请建议我好的解决方案!
我们可以同时订购品牌名称(增加)和价格(减少):
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',
)
)
因为我们将值列表放在字典中,它会创建一个键值对(品牌名称到价格)。如果品牌名称重复,后面出现的值将覆盖以前的值。在这种情况下,对于每个品牌,将使用列表中最后出现的产品价格。因为,我们按照每个品牌内产品价格的降序排列结果,所以最后的价格永远是最低的。
我有两个table一个是品牌另一个是产品现在产品有1个国外的brand_id。
1 个品牌有多种价格不同的产品。
现在,问题是我只想为每个品牌提取 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,
})
请建议我好的解决方案!
我们可以同时订购品牌名称(增加)和价格(减少):
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',
)
)
因为我们将值列表放在字典中,它会创建一个键值对(品牌名称到价格)。如果品牌名称重复,后面出现的值将覆盖以前的值。在这种情况下,对于每个品牌,将使用列表中最后出现的产品价格。因为,我们按照每个品牌内产品价格的降序排列结果,所以最后的价格永远是最低的。