Budete to mít snazší s normalizovanějším datovým modelem. Zvažte použití takového přístupu:
class NodeGroup(model.Model):
pass
class NodeHealth(model.Model):
node_group = models.ForeignKey(NodeGroup, related_name='nodes')
health_time = models.IntegerField()
status = models.IntegerField()
Pak můžete udělat toto:
from django.db.models import Max, F
nodes = NodeHealth.objects.all().annotate(
max_health_time=Max('node_group__nodes__health_time')
).filter(health_time=F('max_health_time'))
Bohužel v tomto okamžiku budou mít vrácené uzly duplikáty, pokud má více než jeden uzel stejnou hodnotu pro health_time
. Možná budete moci přidat .distinct('node_group_id')
to by to mohlo objasnit, ale nejsem 100% pozitivní.