微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django - 按模板中的特定字段对查询集进行分组

如何解决Django - 按模板中的特定字段对查询集进行分组

您正在寻找的 标签,正是您想要的。它需要一个项目序列( 必须事先订购,您必须是它的顺序)和一个查询,并通过 该查询将序列分组。{% regroup %}

view:

events = Event.objects.select_related.all()

template:

{% regroup events by date as events_by_date %}
{% for date in events_by_date %}
    <div class="content">
    <h1>{{ date.grouper|date:"d F Y" }}</h1>
    {% for event in date.list %}
        {% include "partials/event.html" %}
    {% endfor %}
    </div>
{% endfor %}

请注意,该日期格式字符串是不同的;相当于%B在strftime是F针对date过滤器)。

解决方法

我有一张桌子Events,是按田野排序的date。

我想打印出模板中的事件,但为每个日期使用一个单独的div ,例如:

<div class="content">
  <h1>December 30th</h1>
  <!-- div for Event 1 from December 30th -->
  <!-- div for Event 2 from December 30th -->
</div>

<div class="content">
  <h1>December 31st</h1>
  <!-- div for Event 1 from December 31st -->
  <!-- div for Event 2 from December 31st -->
  <!-- div for Event 3 from December 31st -->
</div>

我该怎么做呢?


我当前的解决方案是将Event对象放入以日期
为键的字典中。这具有排序问题,并且效率低下。

视图:

events = Event.objects.select_related().all()

events_dict={}
for event in events:
    date=event.date.strftime('%d %B %Y')
    if date in events_dict:
        events_dict[date].append(event) 
    else:
        events_dict[date] = [event]

Template:

{% for date,events in events_dict.items %}
  <div class="content">
    <h1>{{date}}</h1>
    {% for event in events %}
      {% include "partials/event.html" %}
    {% endfor %}
  </div>
{% endfor %}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。