Bạn sẽ dễ dàng thực hiện việc này hơn với một mô hình dữ liệu chuẩn hóa hơn. Cân nhắc sử dụng cách tiếp cận như sau:
class NodeGroup(model.Model):
pass
class NodeHealth(model.Model):
node_group = models.ForeignKey(NodeGroup, related_name='nodes')
health_time = models.IntegerField()
status = models.IntegerField()
Sau đó, bạn có thể làm điều này:
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'))
Thật không may tại thời điểm đó, các nút được trả về sẽ có các bản sao dựa trên nếu nhiều nút có cùng giá trị cho health_time
. Bạn có thể thêm .distinct('node_group_id')
điều đó có thể làm sáng tỏ điều đó, nhưng tôi không khẳng định 100%.