Я пытаюсь определить наиболее вероятную категорию для точки данных.Поскольку код является лучшим объяснением:
модели:
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
.В настоящее время существует около 5 объектов PredResult на DataPoint и ~ 20 000 точек данных (хотя это может быстро увеличиваться).Однако этот цикл for занимает слишком много времени для завершения в представлении.
Может кто-нибудь предложить способ справиться с этим?Либо трюк с Django ORM, метод extra()
на Queryset
.Или вы думаете, что мне следует использовать метод post-save
для объекта PredResult
и обновить поле непосредственно для объекта DataPoint
?
Если это необходимо, я использую MySQL в качестве бэкенда базы данных.1021 *