gpt4 book ai didi

python - 创建一个允许用户选择日期过滤的 View /模板,其中包括子对象的总计?

转载 作者:行者123 更新时间:2023-11-30 23:02:21 24 4
gpt4 key购买 nike

我有两个模型:

class User(models.Model):
name = models.CharField(max_length=50, blank=False)

class Transaction(models.Model):
user = models.ForeignKey(User, blank=False)
description = models.CharField(max_length=50, blank=False)
total = models.DecimalField(default=0, decimal_places=2)
date = models.DateField(blank=True)
year = models.CharField(max_length=4)
type = models.CharField(max_length=1, db_index=True, choices=(
('C', 'Cash'),
('V', 'Visa'),
('A', 'Amex'),
))

我正在尝试提出一个 View /模板,它将允许我显示一个 html 表格/报告,显示每个用户以及每种交易类型的总计。即

User    Visa    Cash   Amex    Total
User1 $50 $75 $100 $225

第一个报告看起来很简单,一个返回用户查询集的列表报告,在用户模型中我创建了单独的函数来返回每种交易类型的总计(作为反向外键),如下所示:

def value_visa(self):
value = self.transaction_set.filter(user=self,type__in=('Visa')).aggregate(Sum('total'))
return value['total__sum']

def value_all(self):
value = self.transaction_set.filter(user=self).aggregate(Sum('total'))
return value['total__sum']

我知道这可能不是一个理想的解决方案,但它确实有效。

但是,现在我正尝试按日期(或按字符串年份字段)过滤汇总表中包含的交易,但我不太清楚该怎么做。我设计的函数方法需要一个参数来将日期限制为特定日期(不能在模板中提供),或者如果我为交易预取相关(如果没有开发补丁目前不可能),我无论如何都无法在模板中进行求和,也无法弄清楚如何返回包含用户和总和的查询集。日期可以在 URL 中提供,也可以作为用户在表单上的选择,可以是多少都没有关系。

有什么想法吗?一段时间以来,我一直在努力解决这个问题!

提前感谢您的任何想法!

编辑:我在 View 的 get_context_data 方法中解决了这个问题:

users = User.objects.annotate(transactions=Count('transaction')).exclude(transactions=0).order_by('name')
for u in users:
totals = Transaction.objects.filter(user=u,year='2012').values('type').annotate(total=Sum('total'))

有了这个总计,就变成了每个不同类型值的总计的字典 - 所以这很完美。但是,我不确定如何将这两个都获取到模板中——用户是一个 QuerySet 和一个总计数组(因为用户中的每个项目都会有一个,包括一些没有值的项目)。

最佳答案

只是为了结束这个循环,我最终在 View 中做了几个单独的查询,然后运行了一个 for 循环以将它们合并成一个字典并将其传递给模板。有点难看......但它有效。

关于python - 创建一个允许用户选择日期过滤的 View /模板,其中包括子对象的总计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com