Как получить только наиболее часто встречающиеся объекты?
У меня есть объект option, содержащий список опций, которые я отслеживаю. Я хотел бы получить последние значения этой опции.
Моя модель:
class MachineOption(models.Model):
name = models.CharField(max_length=200)
value = models.CharField(max_length=80)
value_type = models.CharField(max_length=10)
date_time = models.DateTimeField(auto_now_add=True)
machine = models.ForeignKey(
"machine.Machine",
verbose_name=_("machine"),
related_name="machine_options",
on_delete=models.CASCADE
)
class Meta:
verbose_name = _("MachineOption")
verbose_name_plural = _("MachineOptions")
ordering = ["machine", "name"]
def __str__(self):
return self.name
Каждый раз, когда значение опции должно быть изменено, я не перезаписываю предыдущее значение, а добавляю новый объект MachineOption, который будет иметь самое последнее значение date_time.
Я могу получить значение одной последней опции с помощью этого запроса:
MachineOption.objects.filter(name="threshold temp").latest("date_time")
Но я не знаю, как получить значения всех последних вариантов. Например, у меня может быть 4 объекта:
{
"id": 6,
"name": "name",
"value": "m1",
"value_type": "string",
"date_time": "2021-09-17T07:12:15.446282Z",
"machine": 1
},
{
"id": 7,
"name": "name",
"value": "m1.0",
"value_type": "string",
"date_time": "2021-09-17T07:12:19.904487Z",
"machine": 1
},
{
"id": 1,
"name": "threshold temp",
"value": "20",
"value_type": "int",
"date_time": "2021-09-17T06:57:37.881934Z",
"machine": 1
},
{
"id": 5,
"name": "threshold temp",
"value": "30",
"value_type": "int",
"date_time": "2021-09-17T07:12:06.128011Z",
"machine": 1
}
Я хочу иметь возможность получить последнюю опцию "threshold temp", а также последнее "name" с помощью одного запроса. Я хочу иметь возможность получить:
{
"id": 7,
"name": "name",
"value": "m1.0",
"value_type": "string",
"date_time": "2021-09-17T07:12:19.904487Z",
"machine": 1
},
{
"id": 5,
"name": "threshold temp",
"value": "30",
"value_type": "int",
"date_time": "2021-09-17T07:12:06.128011Z",
"machine": 1
}
Возможно ли это или мне придется делать запрос для каждого варианта?