Как получить только наиболее часто встречающиеся объекты?

У меня есть объект 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
        }

Возможно ли это или мне придется делать запрос для каждого варианта?

Вернуться на верх