Как сгруппировать по и получить последнюю запись в группе, содержащей все поля в Django?

Представьте, что у нас есть таблица следующего вида:

id name type created_at
1 James male 2022-03-02
2 Jane female 2022-04-02
3 Kirk male 2022-03-04
4 Sarah female 2022-04-04
5 Jason male 2022-03-05

И я хочу сгруппировать по типу и просто получить последние записи на основе created_at.
Поэтому я попробовал этот код и неплохо:

result = User.objects.values('type').annotate(
            latest_date=Max('created_at'),
) 

При печати результата я сталкиваюсь с этим:

<QuerySet [
{'type': 'male', 'latest_date': '2022-03-05'}, 
{'type': 'female', 'latest_date': '2022-04-04'}
]>

Мой вопрос: где находятся другие поля id и name? Я ожидаю получить:

<QuerySet [
{id: 5, name: 'Jason', 'type': 'male', 'latest_date': '2022-03-05'}, 
{id: 4, name: 'Sarah', 'type': 'female', 'latest_date': '2022-04-04'}
]>

Используйте order_by с distinct

User.objects.order_by("type", "-created_at").distinct("type")

это может помочь вам

result = User.objects.values('type').annotate(
                latest_date=Max('created_at'),
    ).values('id','name','type','latest_date')
Вернуться на верх