0

我正在尝试最有可能预测的数据点类别。由于代码是最好的解释:

楷模:

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

class PredResult(models.Model):
    likelihood = models.FloatField()
    value = models.IntegerField()
    data_point = models.ForeignKey(DataPoint)

对于每个 DataPoint 对象,我试图value为 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

我想best_value在查询集中添加一个字段DataPoint。目前每个 DataPoint 大约有 5 个 PredResult 对象和大约 20,000 个 DataPoint(尽管这可能会迅速膨胀)。但是,这个 for 循环需要很长时间才能在视图中完成。

任何人都可以建议一种方法来处理这个问题吗?要么是 Django ORM 技巧,要么extra()Queryset. 还是您认为我应该在对象上使用post-save方法PredResult并直接更新对象上的字段DataPoint

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

4

1 回答 1

0

聚合:

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

现在每个元素values都有一个max_result包含最大相关结果的属性。

于 2011-06-03T18:57:28.940 回答