F-выражение в сочетании с Sum() работает не так, как ожидалось
class Order(models.Model):
pass
class OrderItems(models.Model):
order = models.ForiegnKey(Parent, related_name="items")
price = models.DecimalField()
quantity = models.DecimalField()
class OrderItemSalesTax(models.Model):
order_item = models.ForiegnKey(OrderItems, related_name="sales_tax")
name = models.CharField(max_length=255)
percentage = models.DecimalField(max_digits=6, decimal_places=2)
class OrderItemDiscount(models.Model):
name = models.CharField(max_length=255)
discount = models.DecimalField(max_digits=6, decimal_places=2)
in_percentage = models.BooleanField()
Я использую этот запрос для вычисления общей суммы, а также вычитания скидки и добавления налога с продаж.
Sum(F('items__sales_tax__percentage')) значение равно 25, и я проверил это, запросив базу данных. Сейчас у меня есть только Один заказ и два товара и товара и два Налога с продаж и Одна скидка
Я пытаюсь суммировать налоги с продаж для применения к цене со скидкой, но получаю неправильный результат. Если я вручную напишу 25, заменив Sum(F('items__sales_tax__percentage')), то результаты будут правильными, может что-то не так с моим запросом?
Order.objects.filter(customer__zone__distribution=get_user_distribution(request.user.id))\
.annotate(
trade_price=Sum(F('items__trade_price') * F('items__quantity')),
tax = Sum(F('items__sales_tax__percentage')),
discounted_price = F('trade_price') * ExpressionWrapper(0.01 * (100 - Sum(F('items__discount__discount'))), output_field=DecimalField()),
total = F('discounted_price') + F('discounted_price') * Sum(F('items__sales_tax__percentage')) / 100
)