从产品列表中获取不同的标题,并在 django 中使用该产品标题的最低和最高价格
Get distinct titles from product list with min and max price of that product title in django
我有相同名称但价格不同的产品列表。
这是我的产品型号:
class Product(BaseModel):
title = models.ForeignKey(
ProductTitle,
on_delete=models.CASCADE,
related_name="product_title",
null=True,
blank=True,
)
quantity = models.PositiveIntegerField(default=1)
price = models.FloatField(validators=[MinValueValidator(0.00)])
unit = models.CharField(
max_length=20,
blank=True,
null=True,
help_text="Standard measurement units.eg: kg, meter,etc..",
)
description = models.TextField(
blank=True, null=True, help_text="Short Info about Product"
)
slug = models.SlugField(null=False, unique=True)
比如说,我有10个相同名称但价格不同的产品,其他产品也一样。现在我想获得特定标题的单一(不同)产品,以及该产品的最低和最高价格等等。所以,我应该说橙子有最低价和最高价,苹果有最低价和最高价等等。
我尝试了一些方法,但没有用。就像在这个查询中它给我:
product_qs = (
Product.objects.filter(is_deleted=False)
.order_by("title__title")
.distinct("title__title")
)
p_list = product_qs.values_list("title", flat=True)
product_list = product_qs.filter(title__in=p_list).annotate(
max_price=Max("price"), min_price=Min("price")
)
NotImplementedError at /api/product/unique_product/
annotate() + distinct(fields) is not implemented.
谁能帮我解决这个问题
from django.db.models import Min, Max
Product.objects.values('title__title').annotate(min_val=Min('price'), max_val=Max('price')).order_by()
这将 return :
字典列表,包含 distinct title
、 min_price
和 max_price
SQL 等价于:
SELECT title, max(price) AS max_val, min(price) AS min_val FROM product_table GROUP_BY title;
values() 用于 GROUP BY
,annotate()
用于 MIN 和 MAX:
我有相同名称但价格不同的产品列表。
这是我的产品型号:
class Product(BaseModel):
title = models.ForeignKey(
ProductTitle,
on_delete=models.CASCADE,
related_name="product_title",
null=True,
blank=True,
)
quantity = models.PositiveIntegerField(default=1)
price = models.FloatField(validators=[MinValueValidator(0.00)])
unit = models.CharField(
max_length=20,
blank=True,
null=True,
help_text="Standard measurement units.eg: kg, meter,etc..",
)
description = models.TextField(
blank=True, null=True, help_text="Short Info about Product"
)
slug = models.SlugField(null=False, unique=True)
比如说,我有10个相同名称但价格不同的产品,其他产品也一样。现在我想获得特定标题的单一(不同)产品,以及该产品的最低和最高价格等等。所以,我应该说橙子有最低价和最高价,苹果有最低价和最高价等等。
我尝试了一些方法,但没有用。就像在这个查询中它给我:
product_qs = (
Product.objects.filter(is_deleted=False)
.order_by("title__title")
.distinct("title__title")
)
p_list = product_qs.values_list("title", flat=True)
product_list = product_qs.filter(title__in=p_list).annotate(
max_price=Max("price"), min_price=Min("price")
)
NotImplementedError at /api/product/unique_product/
annotate() + distinct(fields) is not implemented.
谁能帮我解决这个问题
from django.db.models import Min, Max
Product.objects.values('title__title').annotate(min_val=Min('price'), max_val=Max('price')).order_by()
这将 return :
字典列表,包含 distinct title
、 min_price
和 max_price
SQL 等价于:
SELECT title, max(price) AS max_val, min(price) AS min_val FROM product_table GROUP_BY title;
values() 用于 GROUP BY
,annotate()
用于 MIN 和 MAX: