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
                          )

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