2017-02-24 73 views
0

我有一個網站,其中提供了遠足的目錄,用戶可以記錄他們已經進行了這些遠足。我有一個搜索功能,我希望能夠按我的用戶完成的次數排序我的遠程列表。我發現這個職位似乎有關,但指的是某個特定領域的外鍵的模式,而我想僅計算實例總數: Django QuerySet ordering by number of reverse ForeignKey matchesDjango過濾器根據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.objects.order_by(每次加息,在計算用戶日誌引用#,然後將爲了通過#參考)

所以,如果徒步#1有10分用戶日誌的情況下,徒步# 2有20,遠足#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') 

回答

1

在訪問量:

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 %} 
+0

這美麗的工作。我實際上將它用作搜索字段中的排序選項,但能夠將其修改爲可用。謝謝!我編輯了我的原始文章以包含我的最終代碼。 – Josh

相關問題