f表达连词与sum()无法正常工作
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论