【问题标题】:Order list by queryset count in Django/Python在 Django/Python 中按查询集计数排序列表
【发布时间】:2011-02-27 01:34:27
【问题描述】:

对不起,这是基本的,但我是 Python 和 Django 的新手。

我有一个已执行操作的用户列表,该列表保存在单独的表中。我想显示这些用户的列表,按他们执行其他操作的次数排序。

我了解如何计算:

users = User.objects.all()
for user in users:
    print user.action_set.count()

而且我了解如何在我的模板中显示计数:

{% for user in users %}
    {{ user.action_set.count }}
{% endfor %}

但我不知道如何让它按操作集的计数对用户进行排序。

【问题讨论】:

    标签: python django


    【解决方案1】:

    注释/聚合 http://docs.djangoproject.com/en/dev/topics/db/aggregation/

    from django.db.models import Count
    users = User.objects.annotate(action_count=Count('action')).order_by('action_count')
    # note that this also saves your extra query PER user object.
    
    {% for user in users %}
       {{ user.action_count }}
    {% endfor %}
    

    为了将来参考,如果您无法按 DB 排序,您可以对任何列表进行 python 排序...

    my_list.sort(key=lambda x: x[2])
    
    my_list.sort(key=lambda x: x.method())
    

    非常有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-30
      • 2010-12-11
      • 1970-01-01
      • 2020-08-16
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多