是否可以在DJango模板中对一组相关项进行排序?
即:此代码(为清晰起见,省略了HTML标记):
{% for event in eventsCollection %}
{{ event.location }}
{% for attendee in event.attendee_set.all %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
显示几乎完全是我想要的.我唯一想要改变的是我按照姓氏排序的与会者名单.我试过说这样的话:
{% for event in events %}
{{ event.location }}
{% for attendee in event.attendee_set.order_by__last_name %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
唉,上面的语法不起作用(它产生一个空列表),我也没有想过任何其他变化(报告了很多语法错误,但没有快乐).
当然,我可以在我的视图中生成某种排序的与会者列表,但这是一个丑陋而脆弱的(我提到丑陋)解决方案.
毋庸置疑,但无论如何我会说,我已经仔细阅读了在线文档并搜索了Stack Overflow和django-user的档案而没有发现任何有用的东西(啊,如果只有一个查询集是字典,那么dictsort就会这样做工作,但它不是,它没有)
==============================================
在接受Tawmas的回答后,编辑添加了其他想法.
Tawmas完全像我提出的那样解决了这个问题 - 虽然解决方案不是我所期望的.结果,我学到了一种可用于其他情况的有用技术.
汤姆的回答提出了我在我的OP中已经提到的一种方法,暂时被拒绝为"丑陋".
"丑陋"是一种直觉反应,我想澄清它的错误.在这样做时,我意识到这是一个丑陋的方法的原因是因为我对将查询集传递给要呈现的模板的想法感到困惑.如果我放松了这个要求,那么应该采用一种不起眼的方法.
我还没有尝试过这个,但是假设不是传递查询集,而是通过查询集迭代生成事件列表的视图代码,然后使用针对WAS排序(或过滤的)对应参与者的查询集来装饰每个事件.或者其他什么)以期望的方式.像这样的东西:
eventCollection = []
events = Event.object.[filtered and …Run Code Online (Sandbox Code Playgroud)