Django - 优化显示总和为特定数量的每组行

时间:2016-11-10 17:29:08

标签: python django

我正在寻找以下问题的最佳解决方案:

假设您有一群人,每个人在不同的交易上花费不同的金额。交易存储在下表中:

class Transactions(models.Model):
     amount = DecimalField(max_digits=12, decimal_places=2)
     created_on = DateField(auto_now_add=True)
     t_person = ForeignKey('Person')

鉴于具体日期,我希望在该日期之后的30天内找到每个花费超过一定金额的人。更具体地说,我想返回用户制作的每个交易的列表,按用户分组,以及他们花费的总金额。这是我的第一次尝试:

def get_transaction(amount, month_start, month_end):
    total_transactions = Transaction.objects.filter(created_on__gte=month_start, created_on__lte=month_end)
    distinct_people = total_transactions.distinct('t_person').values('t_person')
    amounts = []
    query = []

    for p in distinct_people:
        transactions = total_transactions.filter(t_person=p['t_person'])
        p_sum = transactions.aggregate(Sum('amount'))
        if p_sum['amount__sum'] >= float(amount):
            amounts.append(p_sum['amount__sum'])
            query.append(transactions)

    return zip(amounts, query)

现在这种方法很好用,但我担心这是一种无效的方法,可以完成一些可以简化的工作。有没有更简单的方法来完成这项工作?

0 个答案:

没有答案