Как сделать вычисление полей из разных моделей Django?

Теперь есть три таблицы:

class Product(models.Model):
    sku = models.CharField(max_length=200, unique=True)
    name = models.CharField(max_length=200, null=True)

class HistoricalData(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    date = models.DateTimeField()
    demand_sold = models.IntegerField(default=0)

class ForecastData(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    date = models.DateTimeField()
    demand_sold = models.IntegerField(default=0)

Мне нужно сравнить исторические и прогнозные данные для списка товаров и рассчитать коэффициент точности. Формула выглядит следующим образом: ForecastData.demand_sold * 100/HistoricalData.demand_sold Текущее решение заключается в итерационном просмотре наборов данных истории и прогноза и вычислениях для demand_sold

products = Product.objects.filter(...)
queryset_hist = HistoricalData.objects.filter(product__in=products)
queryset_forecast = ForecastData.objects.filter(product__in=products)

Мне интересно, есть ли какое-нибудь элегантное решение для вычисления поля из разных Django Models. (Например, Join?)

Пробовали ли вы сделать что-то вроде этого:

products = Product.objects.all()
for p in products:  # p is an object of class Product
    one_historical_record = HistoricalData.objects.filter(product=p)
    one_forecast_record = ForecastData.objects.filter(product=p)
    forecast_for_product_p = one_forecast_record.demand_sold * 100/one_historical_record.demand_sold

Это то, что вы ищете?

Вернуться на верх