我想使用自定义排序方案对 Django 模板中的查询集重新排序。
这是模板代码:
{% regroup teams_at_school by season.school_year as teams %}
<ul id="sport-picker">
<li class="first"><span>Sports by year</span></li>
{% for team_grouper in teams|dictsort:"season__school_year" %}
<li><span>{{ team_grouper.grouper }}<img src="http://hometeam.s3.amazonaws.com/graphics/down-pointer.png"></span>
<ul class="dropper">
{% for team_list in team_grouper.list|dictsort:"sport.sport" %}
<li><a href="{{ team_list.season.season_start_date.year }}/{{ team_list.sport.sport_slug }}/">{{ team_list.sport }} {% if team_list.total_wins > 0 or team_list.total_losses > 0 %}({{ team_list.total_wins }}-{{ team_list.total_losses }}){% endif %}</a></li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
产生以下输出:
正如您所看到的,学年的顺序并不理想。数据在数据库中以这种方式显示:
id | school_year
----+-------------
1 | 2010-2011
2 | 2009-2010
3 | 2011-2012
我想按年份对结果重新排序。在 SQL 中,这可以这样表达:
select * from seasons_schoolyear order by substring(school_year from 1 for 4);
结果如下:
id | school_year
----+-------------
2 | 2009-2010
1 | 2010-2011
3 | 2011-2012
有没有办法在创建查询集的语句中实现这种排序:
teams_at_school = Team.objects.filter(school=team).order_by('season__school_year')
或者在模板的regroup
语句中?
最佳答案
将 dictsort 添加到您的重新分组标记中,如下所示:{% regroupteams_at_school|dictsort:"school_year"by season.school_year as groups %}
并删除团队的 dict 排序在下面的 for 标签中。
关于django - 自定义重组订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7046965/