从产品列表中获取不同的产品名称,并在Django中显示该产品名称的最低和最高价格

2024-05-20 13:16:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有相同名称但不同价格的产品清单

这是我的产品型号:

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.

有人能帮我吗


Tags: 名称true产品titlemodelshelp价格product
1条回答
网友
1楼 · 发布于 2024-05-20 13:16:55
from django.db.models import Min, Max

Product.objects.values('title__title').annotate(min_val=Min('price'), max_val=Max('price')).order_by()

这将返回:

字典列表,包含distinct title min_pricemax_price

SQL等效项:

SELECT title, max(price) AS max_val, min(price) AS min_val FROM product_table GROUP_BY title;

用于GROUP BY的值(),以及用于最小值和最大值的annotate()

相关问题 更多 >