我有一个 Django 项目。有 Store 模型和 Analytics 模型。 我想计算每家商店的税金。 是否可以通过 Django ORM 在对数据库的一次请求中聚合它?没有任何商店列表循环?
我不想这样:
for store in stores:
taxes_sum = store.sales_sum*store.tax/100
我想要这样的东西:
taxes_sum = StoreAnalytics.objects.filter(store__user=self.request.user).aggregate(
sales_sum=Sum(F("accruals_sum"))*Sum(F("tax"))/100)
但是每个商店都有自己的税率(6%、15%、20%...)
class Store(models.Model):
user = models.ForeignKey(User, on_delete=models.PROTECT)
name = models.CharField(max_length=128, blank=True, default="", verbose_name="Name")
class StoreAnalytics(models.Model):
store = models.ForeignKey(Store, on_delete=models.CASCADE, null=True, related_name="store_id")
sales_sum = models.DecimalField(
max_digits=10, decimal_places=2, default=Decimal(0), verbose_name="Sales")
tax = models.IntegerField(
default=6, validators=[MaxValueValidator(20), MinValueValidator(0)], verbose_name="Tax %"
)
有什么计算税额的方法吗?
是的,我们可以这样做:
from django.db.models import (F, Sum)
StoreAnalytics.objects.filter().values("store__user_id").annotate(
total_value=Sum((F("sales_sum")*F("tax"))/100),
).order_by("store__user_id")