2017-02-24 10 views
0

私は、ハイキングをカタログするウェブサイトを持っており、ユーザーはこれらのハイキングに行ったことを記録できます。私は検索機能を持っています。私はハイキングのリストをユーザーが完了した分だけ並べ替えることができるようにしたいと考えています。私はインスタンスの総数カウントしたいのに対し、私は、関連すると思われるこのポストを見つけましたが、ForeignKeyのモデルの特定のフィールドを参照している:ここで 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、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') 

答えて

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

関連する問題