Сделать запрос с помощью Django ORM?

Я использовал этот код, чтобы сделать запрос:

views.py:

        reservations_table = Reservation.objects.all()

        total_commission = 0

        for reservation in reservations_table:
            for city in COMMISSION_RATES.keys():
                if reservation.city == city.upper():
                    total_commission += reservation.net_income * COMMISSION_RATES[city] / 100

models.py:

from django.db import models


class Reservation(models.Model):
    reservation_code = models.CharField(max_length=150,unique=True)
    checkin = models.DateField()
    checkout = models.DateField()
    flat = models.CharField(max_length=150)
    city = models.CharField(max_length=150)
    net_income = models.DecimalField(max_digits=10, decimal_places=2)

    def __str__(self):
        return self.reservation_code

constants.py:

COMMISSION_RATES = {
    'LONDON': 10,
    'PARIS': 12,
    'PORTO': 9,
}

Как сделать запрос, используя только Django ORM?

Вы можете попробовать что-то вроде этого. Будьте осторожны, мой код может содержать ошибки, это единственный способ решить вашу проблему.

reservations_table = Reservation.objects.filter(
    city__in=COMMISSION_RATES.keys(),
).annotate(
    instance_commission=F('net_income') * COMMISSION_RATES[F('city')] / Value(100),
).aggregate(
    total_commission=Sum('instance_commission')
)
Вернуться на верх