Получение максимального значения с отличимым внешним ключом 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