我正在寻找以下问题的最佳解决方案:
假设您有一群人,每个人在不同的交易上花费不同的金额。交易存储在下表中:
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)
现在这种方法很好用,但我担心这是一种无效的方法,可以完成一些可以简化的工作。有没有更简单的方法来完成这项工作?