Фильтрация QuerySet
У меня есть QuerySet
data = <QuerySet [<EquipmentCondition: Режим работы Устр-1>,
<EquipmentCondition: Режим работы Устр-1>,
<EquipmentCondition: Режим работы Устр-1>,
<EquipmentCondition: Режим работы Устр-2>,
<EquipmentCondition: Режим работы Устр-2>,
<EquipmentCondition: Режим работы Устр-2>]>
По которому я получаю JSON следующего вида:
[
{
"id_gpu": 2,
"operating_mode": "circle",
"creation_date": "2022-11-14T13:37:04.119371+07:00"
},
{
"id_gpu": 2,
"operating_mode": "circle",
"creation_date": "2022-11-15T15:00:36.146985+07:00"
},
{
"id_gpu": 2,
"operating_mode": "thoroughfare",
"creation_date": "2022-11-15T15:01:13.840250+07:00"
},
{
"id_gpu": 3,
"operating_mode": "circle",
"creation_date": "2022-11-14T11:14:36.701916+07:00"
},
{
"id_gpu": 3,
"operating_mode": "thoroughfare",
"creation_date": "2022-11-15T11:14:45.757467+07:00"
},
{
"id_gpu": 3,
"operating_mode": "reserve",
"creation_date": "2022-11-16T11:14:59.009504+07:00"
}
]
Подскажите, пожалуйста, как отфильтровать QuerySet, чтобы получить следующий результат:
[
{
"id_gpu": 2,
"operating_mode": "thoroughfare",
"creation_date": "2022-11-15T15:01:13.840250+07:00"
},
{
"id_gpu": 3,
"operating_mode": "reserve_under_gas",
"creation_date": "2022-11-16T11:14:59.009504+07:00"
}
]
?
Суть в том, чтобы "id_gpu" стал уникальным, с самой поздней датой создания объекта. Делаю это для сохранения истории.
Текущее решение
Я не уверен, является ли этот метод оптимальным с точки зрения производительности:
...
elif specialist_on_cs and id_current_cs:
output_list_gpu = []
data = EquipmentCondition.objects.filter(id_gpu__id_cs=id_current_cs)
full_list_gpu = EquipmentCondition.objects.values_list('id_gpu', flat=True).distinct()
list_gpu = list(set(full_list_gpu))
for gpu in list_gpu:
one_gpu = data.filter(id_gpu=gpu).order_by('-creation_date')[0]
output_list_gpu.append(one_gpu)
return output_list_gpu