Django получает последнюю запись в группе by [duplicate]

У меня есть записи в следующем формате:

| id  | name |       created                  |
-----------------------------------------------
|1    | A    |2024-04-10T02:49:47.327583-07:00|
|2    | A    |2024-04-01T02:49:47.327583-07:00|
|3    | A    |2024-03-01T02:49:47.327583-07:00|
|4    | A    |2024-02-01T02:49:47.327583-07:00|
|5    | B    |2024-02-01T02:49:47.327583-07:00|

Модель:

class Model1(model.Models):
   name = models.CharField(max_length=100)
   created = models.DateTimeField(auto_now_add=True)

Я хочу выполнить group by в django с месяцем из поля created и получить последнюю запись из этого месяца.

Ожидаемый результат:

| id  | name |       created                  |
-----------------------------------------------
|1    | A    |2024-04-10T02:49:47.327583-07:00|
|3    | A    |2024-03-01T02:49:47.327583-07:00|
|4    | A    |2024-02-01T02:49:47.327583-07:00|

До сих пор я пробовал:

from django.db.models.functions import ExtractMonth
m = Model1.objects.get(id=1)
(
    Model1.objects.filter(name=m.name)
    .annotate(month=ExtractMonth("created"))
    .annotate(latest_time=Max("created"))
    .values("month", "id")
    .order_by("-latest_time")
)

Но это все равно возвращает дублирование данных за месяц. Пожалуйста, поделитесь своими соображениями.

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