You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Django中如何按ref_code分组在模板展示Transaction模型的买家、商品及数量信息

解决Django中按ref_code分组展示交易记录的问题

嘿,这个需求其实很好实现,咱们分后端数据分组模板渲染两步来做就行:

第一步:在视图中对交易记录按ref_code分组

首先要确保同个ref_code的记录是连续的,所以先对查询集按ref_code排序,再用itertools.groupby来分组。这样能把相同ref_code的交易都归到一组里。

视图函数代码示例:

from itertools import groupby
from django.shortcuts import render
from .models import Transaction

def transaction_list(request):
    # 先按ref_code排序,保证同组记录连续(groupby要求连续相同key)
    transactions = Transaction.objects.all().order_by('ref_code')
    # 按ref_code分组,整理成模板易处理的结构
    grouped_data = []
    for ref_code, trans_group in groupby(transactions, key=lambda t: t.ref_code):
        grouped_data.append({
            'ref_code': ref_code,
            'transactions': list(trans_group)  # 把迭代器转成列表,方便模板循环
        })
    return render(request, 'transactions.html', {'grouped_transactions': grouped_data})

第二步:在模板中渲染分组后的内容

拿到分组好的数据后,用两层循环就能实现你要的展示效果:外层循环遍历每个ref_code分组,先显示分组标题;内层循环遍历该分组下的每条交易记录。

模板代码示例(假设模板名为transactions.html):

{% for group in grouped_transactions %}
    <h3>REFERAL CODE: {{ group.ref_code }}</h3>
    {% for trans in group.transactions %}
        <p>Buyer: {{ trans.buyer.username }}, Product : {{ trans.product.name }}, Quantity: {{ trans.quantity }}</p>
    {% endfor %}
{% endfor %}

小提醒:

  • 这里假设你的User模型用的是默认的username字段,Product模型有name字段,如果你的字段名不一样,记得对应修改模板里的字段哦。
  • 一定要先排序!itertools.groupby只会把连续的相同key的项归为一组,如果不排序,同一个ref_code的记录可能分散在不同位置,就会被分成多个组,影响展示效果。

内容的提问来源于stack exchange,提问作者Eddy Hartono

火山引擎 最新活动