Django агрегация с выражениями между значениями ForeignKey (и не)

У меня есть эти модели

class Car(models.Model):
  liter_per_km = models.FloatField(default=1.0)
  
class DrivingSession(models.Model):
  car = models.ForeignKey(Car, on_delete=models.CASCADE)
  km = models.FloatField(default=1.0)

Есть ли способ, используя возможности Django (например, агрегат), вычислить то же самое total_liters, как в коде ниже?

total_liters = 0.0
for session in DrivingSession.objects.all():
  total_liters += (session.km * session.car.liter_per_km)

Вы можете работать с:

from django.db.models import F, Sum

DrivingSession.objects.aggregate(
    total_liters=Sum(F('car__liter_per_km') * F('km'))
)

Таким образом, количество километров для данного DrivingSession будет кратно liter_per_km для данного car.

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