繁体   English   中英

Django-如何通过关联对象排序列表中第一项的属性对对象排序?

[英]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排序。

我将如何实现?

提前致谢!

编辑:

我尝试了Willem van Onsen的解决方案,但它使我获得了以下结果:
我要显示的对象:
所有物件
实际显示的对象:
显示对象

在这种情况下,您可以执行例如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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM