2017-09-28 4 views
0

私はクラスター(都市または町)の学校の表を学校の平均マークに関して降順で表示しようとしています。djangoの降順でオブジェクトをフィルタリングする

<table class="table"> 
    <thead> 
    <tr> 
     <th>School</th> 
     <th>Strength</th> 
     <th>Average</th> 
    </tr> 
    </thead> 
    <tbody> 
    {% for school in school_order %} 
     <tr> 
      <td><a href="{% url 'data:school_detail' state.id region.id cluster.id school.id %}">{{ school.school_name }}</a></td> 
      <td>{{ school.strength }}</td> 
      <td>{{ school.get_average }}</td> 
     </tr> 
    {% endfor %} 
    </tbody> 
</table> 

この私が私のテンプレートで

school_order = cluster.school_set.all().order_by('-get_average') 

を表示しようとしているテーブルこれは私がview.py

get_averageでschool_orderを取得しようとしている方法ですが、フィールドではありませんモデル学校のために私がモデルで使用した方法です。

class School(models.Model): 
    state = models.ForeignKey(State, on_delete=models.CASCADE) 
    region = ChainedForeignKey(Region, chained_field="state",chained_model_field="state", show_all=False, auto_choose=True, sort=False, on_delete=models.CASCADE) 
    cluster = ChainedForeignKey(Cluster, chained_field="region",chained_model_field="region", show_all=False, auto_choose=True, sort=False, on_delete=models.CASCADE) 
    school_name = models.CharField(max_length=250) 
    facilitator = models.CharField(max_length=250) 
    f_number = models.IntegerField() 
    f_email = models.EmailField() 
    school_logo = models.FileField(default='') 
    strength = models.IntegerField() 

    def get_average(self): 
     return self.avergae_set.latest('average_date').average_value 

これは学校向けのモデルです。

「get_average」というキーワードをフィールドに解決できません。

助けてください!

+1

メソッドを 'order_by'に渡すことはできません。しかし、Pythonの組み込みの 'sorted()'関数を使って、[この回答](https://stackoverflow.com/a/32050078/1925257)のようにメソッドを使ってクエリーセットをソートすることができます。また、 'avergae_set'にスペルミスがあります。 – xyres

答えて

0

非モデルフィールドにDjango ORMのorderbyを使用することはできません。あなたはキューセットをリストに変換し、Pythonでソートすることができます。

school_order = list(cluster.school_set.all()).sort(key=lambda x: x.get_average, reverse=True) 

その他のオプションは、追加または注釈を選択できますか?

参照:https://docs.djangoproject.com/en/1.11/ref/models/querysets/#annotate

関連する問題