Фильтр "Django" по последним добавленным связанным объектам
Я хочу фильтровать по последнему добавленному элементу связанной модели с полем отношения foreignkey. Я много пробовал, но не могу добиться результата, Мои модели выглядят следующим образом
class Status(models.Model):
member= models.ForeignKey(Member, on_delete=models.CASCADE, related_name='member_status')
name = models.CharField(max_length=2, choices=("new","old","continue")
status_created_at = models.DateTimeField(auto_now_add=True)
class Member(models.Model):
messageContent= models.TextField(null=True, blank=True)
мой набор запросов выглядит следующим образом
{
"id": 1,
"member_status": [
{
"id": 8,
"name": "new",
"notes": "",
"status_created_at": "2021-01-01T17:55:21.523162Z",
"member": 1
},
{
"id": 9,
"name": "old",
"notes": "",
"status_created_at": "2022-08-09T17:56:06.995086Z",
"order": 1
}
],
"messageContent": "example",
},
"id": 1,
"member_status": [
{
"id": 11,
"name": "new",
"notes": "",
"status_created_at": "2021-01-01T17:55:21.523162Z",
"member": 1
},
{
"id": 12,
"name": "continue",
"notes": "",
"status_created_at": "2022-08-08T17:56:06.995086Z",
"order": 1
}
],
"messageContent": "example content",
}
для фильтрации с помощью FilterSet
def filter_queryset(self, queryset): queryset= Member.objects.filter(member_status__name=self.request.query_params.get('memberStatus')) return super().filter_queryset(queryset)
Я хочу фильтровать по статусу последнего члена, но при фильтровании по "new" все объекты попадают в кверисет. Я хочу получить членов, отфильтрованных по последнему статусу.
Помогите мне, пожалуйста?
Я не могу найти точный ответ в Интернете, но этого мне сейчас достаточно. Я добавляю это решение
def filter_queryset(self, queryset):
queryset = Status.objects.filter(id__in=Status.objects.values("member").annotate(max_id=Max('id')).values("max_id"),name=self.request.query_params.get('status'))
queryset = Member.objects.filter(member_status__in=queryset)
return super().filter_queryset(queryset)
Этот код скрипта очень сложный, поэтому я думаю, может кто-нибудь поделиться четким решением