Python Django筛选器按ForeignKey相关对象的数量排序

Python Django筛选器按ForeignKey相关对象的数量排序,python,django,Python,Django,我有一个网站,上面有徒步旅行的目录,用户可以记录他们已经进行了这些徒步旅行。我有一个搜索功能,我想能够排序我的名单,远足的次数,他们已经完成了我的用户。我发现这篇文章似乎相关,但它指的是foreignkey模型中的一个特定字段,而我只想计算实例的总数: 以下是一些示例代码: models.py: class Hikes(models.Model) ... class UserLog(models.Model) user = models.ForeignKey(User, o

我有一个网站,上面有徒步旅行的目录,用户可以记录他们已经进行了这些徒步旅行。我有一个搜索功能,我想能够排序我的名单,远足的次数,他们已经完成了我的用户。我发现这篇文章似乎相关,但它指的是foreignkey模型中的一个特定字段,而我只想计算实例的总数:

以下是一些示例代码:

models.py:

class Hikes(models.Model)
...    

class UserLog(models.Model)
     user = models.ForeignKey(User, on_delete=CASCADE)
     hike = models.ForeignKey(Hikes, on_delete=CASCADE)
我需要从我的Hikes模型生成一个queryset,它统计UserLog引用每个Hikes的次数,然后从引用次数最多到引用次数最少的Hikes排序。大概是这样的:

Hikes.objects.order_by(对于每次hike,在UserLog中计数#个引用,然后按#个引用排序)

因此,如果Hike#1有10个用户日志实例,Hike#2有20个,Hike#3有5个,则查询集将返回: 徒步旅行2,徒步旅行1,徒步旅行3

有什么建议吗

编辑:感谢viviwill,以下是搜索字段中的工作代码:

def hike_list(request):
    qs = Hikes.objects.all()
    ...
    if request.GET:
        ...
        searchsort = request.GET.get('sortby', '')
        if searchsort == 'sortlocalrepeats':
            qs = qs.annotate(count=Count('userlog')).order_by('-count')
在以下观点中:

context['rank_hike'] = Hikes.objects.annotate(number_of_hikes=Count('UserLog')).order_by('-number_of_hikes')
在模板中:

{% for hike in rank_hike %}
<p>{{ hike }} {{ hike.number_of_entries }}</p>
{% endfor %}
{排名中的提升百分比_hike%}
{{hike}{{hike.number_of_entries}}

{%endfor%}
这项工作做得很好。实际上,我在搜索字段中使用它作为排序选项,但能够修改它以使其正常工作。非常感谢。我已经编辑了我的原始帖子以包含我的最终代码。它会给你重复的值。