python - Django - 如何通过关联对象的排序列表中第一项的属性对对象进行排序?
问题描述
我想实现以下目标:
我有一个对象,让我们假设以下类:
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
B()
其中与一个对象关联的每组A()
对象按 排序B.time
,而A()
对象本身按B.time
这些A()
对象中的顶部排序。
我将如何实现这一目标?
提前致谢!
编辑:
解决方案
在这种情况下,您可以执行 perform 例如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>
推荐阅读
- android - java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: 无法合并 dex || 安卓
- excel - 跨工作表复制公式范围
- c# - 在 KENDO Grid 中的 DATE 列字段上选择 FILTER(为 NULL 或为空)时
- csv - 从 CSV UNIX SH 中修剪顶部和底部行
- javascript - 使用谷歌脚本创建折线图 - 谷歌表作为数据源
- admin-on-rest - TypeError:翻译不是函数
- kubernetes - 试图了解法兰绒与法兰绒吊舱的用法
- hyperledger - 每次都处于挂起状态的交易
- amazon-dynamodb - 如何在 DynamoDB 中的单个查询中查询一个应该存在而另一个不应该存在于表中的条件
- .net - 如何使用 VB.NET 应用程序动态获取 AssemblyCustomAttribute 的值?