【问题标题】:django regroup odd behaviordjango重新组合奇怪的行为
【发布时间】:2023-03-27 17:56:01
【问题描述】:

无论出于何种原因,我都无法在本地复制此问题,但在我的一个模板中的生产服务器上,重新组合标记正在做一些奇怪的事情。我正在尝试对所有具有相同pickup_id 的捐赠进行分组,并仅显示其中有多少被“错过”。由于某种原因,它在我的列表中多次显示相同的pickup_id。

查看

missed_routes = Donor.objects.filter(missed='YES').order_by('pickup_date')  

模板

{% block content %}
{% regroup missed_routes by pickup_id as missed_pickups %}

<div class="missedColumn">
    <h2>Missed Donations</h2>
    <p>Looks like we have some stragglers…</p>
    <p>These routes have missed donations in them.</p>
    {% for routes in missed_pickups %}

        <p><a href="/reschedule/{{ routes.grouper }}">{{ routes.list.0.route }}</a> - {{ routes.list.0.pickup_date }} ({{ routes.list|length }} missed - {{ routes.list.0.pickup_id }}</p>
    {% endfor %}
</div>

resulting html # 600 是pickup_id

        <p><a href="/reschedule/600">Syosset</a> - Sept. 14, 2012 (1 missed - 600</p>


        <p><a href="/reschedule/423">Huntington Station</a> - Sept. 14, 2012 (1 missed - 423</p>


        <p><a href="/reschedule/600">Syosset</a> - Sept. 14, 2012 (2 missed - 600</p>

在拾取 html 输出中迭代每个捐助者时

        <p><a href="/reschedule/600">Syosset</a> - Sept. 14, 2012 (1 missed - 600
        <ul>

            <li>134170</li>

        </ul>
        </p>


        <p><a href="/reschedule/423">Huntington Station</a> - Sept. 14, 2012 (1 missed - 423
        <ul>

            <li>134938</li>

        </ul>
        </p>


        <p><a href="/reschedule/600">Syosset</a> - Sept. 14, 2012 (2 missed - 600
        <ul>

            <li>134174</li>

            <li>133151</li>

        </ul>

【问题讨论】:

  • 两个pickup_id之间是否可能存在一些细微差别,例如空格?也许您可以在页面上显示相关的 HTML?
  • 它是一个 IntegerField 所以它们不应该是任何空格。一旦创建了pickup_id,就会自动生成pickup_id,然后为捐助者分配一个pickup_id。
  • 你能显示生成的 HTML 吗?
  • html 发布在 OP 中
  • 嗯,有趣的是 2 个在一组中,而在另一组中只有 1 个。您能否使用for donor in routes.list 之类的 for 循环显示每个组中每个捐赠者的主键?这将确认是有一个捐助者最终分成两组还是三个捐助者分裂

标签: django django-templates


【解决方案1】:

问题在于 Django 的重新组合取决于您重新组合的属性所排序的列表。见docs

请注意,{% regroup %} 不会对其输入进行排序!我们的示例依赖于这样一个事实,即城市列表首先是按国家/地区排序的。如果城市列表未按国家/地区对其成员进行排序,则重组将天真地显示单个国家/地区的多个组

因此,改变:

missed_routes = Donor.objects.filter(missed='YES').order_by('pickup_date')  

missed_routes = Donor.objects.filter(missed='YES').order_by('pickup_id')  

【讨论】:

  • 做到了!我觉得很愚蠢,因为我没有抓住它。太感谢了。但是,我怎样才能对我的输出进行排序,以便结果仍按pickup_date 的顺序排序?
  • 别担心,我也花了几分钟才赶上(但在这些情况下最好点击文档)。但是,您不能将它们都按pickup_id 分组并按日期排序——这两个订单可能会发生冲突)。您的意思是按日期每个组中排序吗?
  • (在这种情况下,你会做.order_by('pickup_id', 'pickup_date')
  • 对不起,是的,我就是这个意思。我想对其进行排序,以便每个分组日期都按顺序排列。
  • 最后一件事 - missed 是什么类型的字段?如果只有“YES”和“NO”,你不应该把它设为 BooleanField 而不是 CharField 吗?
猜你喜欢
  • 2010-12-23
  • 1970-01-01
  • 2011-02-24
  • 2015-10-12
  • 2015-01-14
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
相关资源
最近更新 更多