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
.