【发布时间】:2017-02-24 22:42:09
【问题描述】:
我有一个网站,其中列出了远足,用户可以记录他们已经进行了这些远足。我有一个搜索功能,我希望能够按照我的用户完成的次数对我的远足列表进行排序。我发现这篇文章似乎相关,但指的是外键模型中的特定字段,而我只想计算实例总数: 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')
【问题讨论】: