2016-04-19 7 views
2

Ich versuche, ein Abfrage-Set nach der Anzahl eines anderen Modells zu sortieren, auf das sich das Abfrage-Set bezieht.Sortieren nach Anzahl der verwandten Modell in Django?

class Post(models.Model): 
    ... 

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

Nun, würde ich davon ausgehen, dass dies funktionieren würde:

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

Aber ich bekomme diese Fehlermeldung:

AttributeError at /api/posts/?order_by=views

'ManyToOneRel' object has no attribute 'attname'

Was mache ich falsch?

Antwort

3

Wenn Sie nach der Anzahl der zugehörigen PostView-Instanzen sortieren möchten, sollten Sie das Abfrage-Set mit der Anzahl annotieren, und dann nach dem annotierten Feld sortieren.

from django.db.models import Count 

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

Ich kann mich nicht von ganz oben erinnern, ob es 'Count ('post_views')' 'oder' Count ('postview') '' ist. – Alasdair

Verwandte Themen