Сделать запрос с помощью 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')
)