[英]Django - How to sort objects by an attribute of the first item in a sorted list of associated objects?
我要实现以下目标:
我有一个对象,让我们假设以下类:
class A():
title
class B():
foreign key = A.id
time
#one-to-many relation
我想知道如果要显示如下列表,视图和模板会是什么样子:
A.Title1
B.time #A is sorted on these ones
B.time
A.Title2
B.time #A is sorted on these ones
B.time
B.time
其中,与一个A()
B()
对象关联的每组B()
对象B.time
排序,而A()
对象本身按这些A()
对象中的顶部B.time
排序。
我将如何实现?
提前致谢!
编辑:
在这种情况下,您可以执行例如itertools.groupby
:
# views.py
from itertools import groupby
from operator import attrgetter
from django.db.models import Min
def some_view(request):
bs = B.objects.prefetch_related(
'foreign_key'
).annotate(
first_b=Min('foreign_key__b__time')
).order_by('first_b', 'time')
groups = groupby(bs, key=attrgetter('foreign_key'))
return render(request, 'some_template.html', {'groups': groups})
然后,作为模板( some_template.html
),我们可以使用:
<ul>
{% for group, items in groups %}
<li>{{ group.title }}</li>
<ul>
{% for item in items %}
<li>{{ item.time }}</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.