在 Django 中使用模型 属性 获取每个帐户的销售总额
Get sales totals per account using model property in django
好吧,我以为我可以google摆脱困境,但我被困住了。
期望的结果是
Account_name Total
local sales 1802.50
int sales 0.00
来自我的模特
class Account(models.Model):
account_number = models.IntegerField(unique=True, null=True, blank=True, default=None)
account_name = models.CharField(max_length=200, null=True, blank=True, unique=True)
class Sales(models.Model):
account_name = models.ForeignKey(Account, on_delete=models.CASCADE, related_name='incomes')
amount = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
def sales_total(self):
sales_total = Income.objects.values('account_name').order_by('account_name').annotate(sales_total=Sum('sales__total'))
return sales_total
所以在我的模板中
{% for account in accounts %}
<tr>
<td>{{ account.sales_total }}</td>
</tr>
{% endfor %}
我明白了
Account_name Total
local sales <QuerySet [{'account_name': 3, 'sales_total': Decimal('1802.5')}]>
int sales <QuerySet [{'account_name': 3, 'sales_total': Decimal('1802.5')}]>
更改 sales_total 函数:
def sales_total(self):
sales_total = Income.objects.values('account_name').order_by('account_name').annotate(sales_total=Sum('sales__total'))
return sales_total[0].sales_total
更多信息:https://docs.djangoproject.com/en/4.0/topics/db/aggregation/#cheat-sheet
所以我在网上进行了如此多的研究后设法做到了这一点
在帐户模型中我定义了一个函数来获取销售总额
def sales_total(self):
return sum([item.sales_total() for item in self.incomes.all()])
模板中的值为 {{ account.sales_total }}
好吧,我以为我可以google摆脱困境,但我被困住了。
期望的结果是
Account_name Total
local sales 1802.50
int sales 0.00
来自我的模特
class Account(models.Model):
account_number = models.IntegerField(unique=True, null=True, blank=True, default=None)
account_name = models.CharField(max_length=200, null=True, blank=True, unique=True)
class Sales(models.Model):
account_name = models.ForeignKey(Account, on_delete=models.CASCADE, related_name='incomes')
amount = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
def sales_total(self):
sales_total = Income.objects.values('account_name').order_by('account_name').annotate(sales_total=Sum('sales__total'))
return sales_total
所以在我的模板中
{% for account in accounts %}
<tr>
<td>{{ account.sales_total }}</td>
</tr>
{% endfor %}
我明白了
Account_name Total
local sales <QuerySet [{'account_name': 3, 'sales_total': Decimal('1802.5')}]>
int sales <QuerySet [{'account_name': 3, 'sales_total': Decimal('1802.5')}]>
更改 sales_total 函数:
def sales_total(self):
sales_total = Income.objects.values('account_name').order_by('account_name').annotate(sales_total=Sum('sales__total'))
return sales_total[0].sales_total
更多信息:https://docs.djangoproject.com/en/4.0/topics/db/aggregation/#cheat-sheet
所以我在网上进行了如此多的研究后设法做到了这一点
在帐户模型中我定义了一个函数来获取销售总额
def sales_total(self):
return sum([item.sales_total() for item in self.incomes.all()])
模板中的值为 {{ account.sales_total }}