我有一个目录远足的网站,用户可以记录他们已经进行了这些远足。我有一个搜索功能,我希望能够按照用户完成的次数对我的徒步列表进行排序。我发现这篇文章看似相关,但是指的是外键模型中的特定字段,而我只想计算实例的总数: Django QuerySet ordering by number of reverse ForeignKey matches
以下是一些示例代码:
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模型生成一个查询集,该模型计算UserLog引用每次加息的次数,然后从大多数引用到最少引用命令。像这样:
Hikes.objects.order_by(对于每次徒步旅行,计算UserLog中的引用数量,然后按引用数量排序)
因此,如果Hike#1有10个UserLog实例,Hike#2有20个,而Hike#3有5个,则QuerySet将返回: 远足#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')
答案 0 :(得分:2)
观点:
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 %}