f表达连词与sum()无法正常工作

发布于 2025-02-05 19:14:18 字数 2174 浏览 2 评论 0原文

class Order(models.Model):
    pass

class OrderItems(models.Model):
    order = models.ForiegnKey(Order, related_name="items")
    name = models.CharField(max_length=255, null=False)
    quantity = models.DecimalField(max_digits=5, decimal_places=2)
    supplier = models.CharField(max_length=255, null=False)
    purchase_price = models.DecimalField(max_digits=10, decimal_places=2)
    trade_price = models.DecimalField(max_digits=10, decimal_places=2,blank=False, null=False , default = 0.00)
    retail_price = models.DecimalField(max_digits=10, decimal_places=2)


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):
    order_item = models.OneToOneField(OrderItem, primary_key=True, on_delete=models.CASCADE, related_name='discount')
    name = models.CharField(max_length=255)
    discount = models.DecimalField(max_digits=6, decimal_places=2)
    in_percentage = models.BooleanField()

我正在使用此查询来计算总金额,但也扣除折扣并增加营业税。

sum(f(f('tooks__sales_tax__ percentage'))值为25,我已经对其进行了验证,请查询数据库。现在,我只有一个一个订单,两个项目和物品有两个营业税一个折扣

我正在尝试总而言之,营业税以折扣价申请,但我得到了错误的结果。如果我通过替换 sum(f('items__sales_tax__ percentage')手动编写 25 )是正确的,我的查询有什么问题吗?

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
                          )

class Order(models.Model):
    pass

class OrderItems(models.Model):
    order = models.ForiegnKey(Order, related_name="items")
    name = models.CharField(max_length=255, null=False)
    quantity = models.DecimalField(max_digits=5, decimal_places=2)
    supplier = models.CharField(max_length=255, null=False)
    purchase_price = models.DecimalField(max_digits=10, decimal_places=2)
    trade_price = models.DecimalField(max_digits=10, decimal_places=2,blank=False, null=False , default = 0.00)
    retail_price = models.DecimalField(max_digits=10, decimal_places=2)


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):
    order_item = models.OneToOneField(OrderItem, primary_key=True, on_delete=models.CASCADE, related_name='discount')
    name = models.CharField(max_length=255)
    discount = models.DecimalField(max_digits=6, decimal_places=2)
    in_percentage = models.BooleanField()

I am using this query to calculate the total amount, but also deducting discount and adding Sales tax.

Sum(F('items__sales_tax__percentage')) value is 25, and I have verified it, querying the database. Right now I have only One order and two Items and Items have two Sales Taxes and One Discount

I am trying to Sum the Sales taxes to apply on discounted price, but I am getting the wrong result results. If I manually write 25 by replacing Sum(F('items__sales_tax__percentage')) then results are correct, is there anything wrong with my query ?

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
                          )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文