如何打印和使用列表变量(使用groupby)

2024-10-04 03:27:02 发布

您现在位置:Python中文网/ 问答频道 /正文

def moneybook_detail(request, pk):
    moneybook = moneybook_models.Moneybook.objects.get(pk=pk)
    moneylogs = moneybook.moneylog_set.all()

    def extract_pay_day(moneylogs):
        return moneylogs.pay_day.date()

    same_day_pays = moneylogs.order_by("pay_day")
    for pay_day, group in groupby(same_day_pays, key=extract_pay_day):  
        print(pay_day, list(group))

我不完全理解这一行的循环。我正在关注stackoverflow上的这篇文章

然后我得到下面的查询

2020-01-09 [<Moneylog: Moneylog object (4)>]
2020-01-12 [<Moneylog: Moneylog object (1)>, <Moneylog: Moneylog object (2)>, <Moneylog: Moneylog object (3)>, <Moneylog: Moneylog object (5)>, <Moneylog: Moneylog object (6)>]

如何在html中使用此查询?我必须使用哪个变量?比如:

{{same_day_pay.pay_day}}
{% for same_day_pay in same_day_pays %}
    {{same_day_pay.memo}} / {{same_day_pay.price}}
{% endfor% }

->;结果

**2019.01.03**
pay1 / 120
pay2 / 200

**2019.01.02**
pay0 / 100 

Tags: inforobjectdefgroupextractpaysame
1条回答
网友
1楼 · 发布于 2024-10-04 03:27:02

您可以在视图中创建嵌套列表并在模板中使用,例如,您的视图:

    def moneybook_detail(request, pk):
        moneybook = moneybook_models.Moneybook.objects.get(pk=pk)
        moneylogs = moneybook.moneylog_set.all()

        def extract_pay_day(moneylogs):
            return moneylogs.pay_day.date()

        same_day_pays = moneylogs.order_by("pay_day")
        sd_list = []
        for pay_day, group in groupby(same_day_pays, key=extract_pay_day):  
            sd_list.append((pay_day, list(group)))

        return render(request, 'moneylog.html', {'samedaypays': sd_list})

在模板中

{% for sd in samedaypays %}
    <p>** {{ sd.0 }} **</p>
    {% for o in sd.1 %}
        <p>{{ o.memo }} / {{ o.price }}</p>
    {% endfor %}
{% endfor %}

为了完整起见:还有一个名为regroup的django模板标记,允许您在模板中执行与here所述相同的操作

相关问题 更多 >