2016-04-19 6 views
2

私はquerysetが関係する別のモデルの数によってquerysetを注文しようとしています。djangoで関連するモデルの数で並べ替えますか?

class Post(models.Model): 
    ... 

class PostView(models.Model): 
    post = models.ForeignKey(Post, related_name="post_views") 

さて、私はこれがうまくいくことを前提としています:

Post.objects.all().order_by('post_views') 

しかし、私はこのエラーを取得する:

AttributeError at /api/posts/?order_by=views

'ManyToOneRel' object has no attribute 'attname'

は私が間違って何をしているのですか?

答えて

3

PostViewインスタンス数で注文する場合は、クエリーセットに数を注釈し、注釈付きフィールドで注文する必要があります。

from django.db.models import Count 

Post.objects.annotate(num_views=Count('post_views')).order_by('num_views') 
+0

「Count( 'post_views')」か「Count( 'postview')」のいずれの頭文字でも覚えがたいです。 – Alasdair

関連する問題