Django Queryset根据另一个字段的排序创建.values()

Django Queryset根据另一个字段的排序创建.values(),django,django-queryset,django-aggregation,Django,Django Queryset,Django Aggregation,我正在尝试为数据点选择最可能预测的类别。因为代码是最好的解释: 型号: class DataPoint(models.Model): #... unimportant fields class PredResult(models.Model): likelihood = models.FloatField() value = models.IntegerField() data_point = models.ForeignKey(DataPoint) 对于每个

我正在尝试为数据点选择最可能预测的类别。因为代码是最好的解释:

型号:

class DataPoint(models.Model):
    #... unimportant fields

class PredResult(models.Model):
    likelihood = models.FloatField()
    value = models.IntegerField()
    data_point = models.ForeignKey(DataPoint)
对于每个DataPoint对象,我试图找到具有最高可能性的PredResult的值。目前我正在使用for循环:

data_points = DataPoints.objects.select_related('predresult')
for dp in data_points:
    if dp.predresult_set.all().exists():
        val = dp.predresult_set.order_by('-likelihood')[0].value
        #do other stuff here with val and dp
我想在数据点查询集中添加一个最佳值字段。目前,每个数据点约有5个PredResult对象,约有20000个数据点,尽管这可能会迅速膨胀。但是,此for循环在视图中花费的时间太长

有人能提出一个解决这个问题的方法吗?要么是Django ORM技巧,要么是Queryset上的额外方法。或者您认为我应该对PredResult对象使用post save方法并直接更新DataPoint对象上的字段吗

如果需要,我将使用MySQL作为数据库后端。

聚合:

from django.db.models import Max
values = DataPoint.objects.annotate(max_result=Max('predresult__value'))

现在values中的每个元素都有一个max_result属性,该属性包含与max相关的结果。

不完全是我想要的。这将提供最大的价值。。。我需要一个最大似然的值。那么它不就是最大的‘predresult_uu似然’吗?那么我只会得到最大似然。我需要可能性最大的值。