Получение максимального значения с отличимым внешним ключом Django ORM

Итак, это моя Модель.

class OrderLine(models.Model):
    product = models.ForeignKey(Product, on_delete=models.PROTECT, verbose_name="Product",      null=False)
    unit_price = models.DecimalField(null=True, max_digits=12, decimal_places=4, blank=True, verbose_name="Unit price")

Я пытаюсь фильтровать с несколькими идентификаторами продуктов, один продукт может иметь несколько OrderLine с различной ценой за единицу продукции, поэтому как я могу получить одну запись максимальной цены за единицу продукции для каждого продукта.

Я пытался

to_lines = (OrderLine.objects.filter(transfer_id__in=to_ids,product_id__in=part_ids).values("unit_price").order_by("product_id").aggregate(Max("unit_price")))

Но он возвращает единицу по всем продуктам.

Вы можете использовать выражение GROUP BY как

from django.db.models import Max

result = OrderLine.objects.values("product").annotate(max_per_prod=Max("unit_price"))

Это почти аналогично SQL-выражению

SELECT product_id, MAX(unit_price) FROM table_name GROUP BY product_id
Вернуться на верх