Если вы используете PostgreSQL:
Purchases.objects.filter(.....).order_by(
'customer', '-field_of_interest'
).distinct('customer')
или с Window
выражением
Purchases.objects.filter(.....).annotate(my_max=Window(
expression=Max('field_of_interest'),
partition_by=F('customer')
)
).filter(my_max=F('field_of_interest'))
, но последний может выдать несколько строк на клиента, если они имеют одинаковые field_of_interest
Другой Window
, с одной строкой для каждого клиента
Purchases.objects.filter(.....).annotate(row_number=Window(
expression=RowNumber(),
partition_by=F('customer'),
order_by=F('field_of_interest').desc()
)
).filter(row_number=1)