我可以编写一个循环以用汇总值填充字典来创建表吗?

时间:2019-04-26 18:40:22

标签: django database loops dictionary

我试图调用我的交易对象并循环遍历它,以创建来自交易对象的汇总值字典。我正在尝试使用这些值填充表。是否可以这样做,如果可以的话,请给我一些建议。我希望用用户交易过的每种不同的货币填充字典,他们拥有的当前货币量,因此用户货币的总和(current_amount),用户货币总和的购买金额(purchase_amount),用户总和的每种货币的销售金额(已售),用户每种货币的当前价值, 用户每种货币的购买价值,以及用户每种货币的销售价值。我现在已经对数据进行了硬编码以用于测试,但是我想创建一个循环以用查询结果填充json

喜欢填充下面的表格ID

 {% for total_transaction in total_transactions %}
            <tr>
                <td>{{total_transaction.currency}}</td>
                <td>{{total_transaction.current_amount}}</td>
                <td>{{total_transaction.purchased_amount}}</td>
                <td>{{total_transaction.sold_amount}}</td>
                <td>{{total_transaction.current_value}}</td>
                <td>{{total_transaction.purchased_value}}</td>
                <td>{{total_transaction.sold_value}}</td>
            </tr>
            {% endfor %}

以下功能

portfolio(request):

    count = Transaction.objects.filter(owner=request.user).values('currency').distinct(),

    context = {
        'total_transactions': [{
            'currency': 'BTC', 'current_amount': 3, 'purchased_amount': 5, 'sold_amount': 2, 'current_value': 180,
            'purchased_value': 400, 'sold_value': 380}, {
            'currency': 'LTC', 'current_amount': 3, 'purchased_amount': 5, 'sold_amount': 2, 'current_value': 180,
            'purchased_value': 400, 'sold_value': 380}, {
            'currency': 'XRP', 'current_amount': 3, 'purchased_amount': 5, 'sold_amount': 2, 'current_value': 180,
            'purchased_value': 400, 'sold_value': 380}
        ]
    }

    return render(request, 'webapp/portfolio.html', context, {'title': 'Portfolio'})

1 个答案:

答案 0 :(得分:0)

如果您的交易模型已经包含所有这些字段,则可以简单地使用此字段:

portfolio(request):
    #define each sub query like this
    sum_currency_amount = Sum('amount').order_by('currency')
    #the main query will be to get all transaction per users following by each annotate that allows you to define some key and value for the queryset.
    transactions = Transaction.objects.filter(owner=request.user).annotate(
            currency_amount = sum_currency_amount,
            #other subquery here
    ),
    return render(request, 'webapp/portfolio.html', context, {'title': 'Portfolio','total_transactions':transactions})

模板可以保持不变。