Последние объекты каждой группы с помощью фильтра Django в бэкенде mysql
У меня есть 2 модели-
class WLSDomainName(BaseMixin):
domain_name = models.CharField('Domain Name',max_length=255, null=False, blank=False)
site_name = models.CharField('Site Name', max_length=10, choices = SITE_NAME, default='dc',blank=False, null=False)
delete_status = models.BooleanField(default=False)
class DomainOverallHealthStatus(BaseMixin):
domain_name = models.ForeignKey(WLSDomainName, on_delete=models.CASCADE, null=True, blank=False, related_name="overall_health_status_domain_name")
configuredServerCount = models.IntegerField(blank=True, null=True)
activeServerCount = models.IntegerField(blank=True, null=True)
overallServiceHealth = models.CharField(max_length=255, null=True, blank=True)
activeThreadCount = models.IntegerField(blank=True, null=True)
activeHttpSessionCount = models.IntegerField(blank=True, null=True)
classification_time = models.CharField(max_length=20, null=True, blank=True)
Мне нужно найти последний объект из модели DomainOverallHealthStatus для каждого объекта WLSDomainName.
Я пытался-
o_health = DomainOverallHealthStatus.objects.all().values('domain_name').annotate(Max('created')).order_by()
Этот запрос возвращает мне только id и created.
<QuerySet [{'domain_name': 1, 'created__max': datetime.datetime(2022, 8, 31, 9, 14, 49, 217073, tzinfo=datetime.timezone.utc)}, {'domain_name': 2, 'created__max': datetime.datetime(2022, 8, 31, 9, 14, 50, 338368, tzinfo=datetime.timezone.utc)}]>
Но мне нужно получить каждый столбец DomainOverallHealthStatus.
Заранее спасибо.
запрос, который вы хотели:
from django.db.models import Max, F
o_health = DomainOverallHealthStatus.objects.alias(
latest=Max('domain_name__overall_health_status_domain_name__created')
).filter(
created=F('latest')
)