2017-09-20 2 views
1

Hier ist mein Modell,Django: Die Abfrage der Datenbank

class Question(models.Model): 
    user = models.ForeignKey(User) 
    followers = models.ManyToManyField(User, related_name='user_follow') 

Ich frage mich, wie kann ich von den Benutzern, die drei am meisten gefolgt Fragen herausfiltern?

Danke :)

Antwort

2

Sie queryset durch Folger Zahl bestellen konnte. Wie folgt aus:

from django.db.models import Count 

most_followed = Question.objects.annotate(follower_count=Count('user_follow')).order_by('-follower_count') 

Um herauszufiltern 3 am meisten gefolgt Fragen:

top_three = most_followed[:3] 
+1

Danke, mein Herr. Lil ändern Name "Follower" war im Konflikt mit der Datenbank :) –

+1

Whoops, bearbeitete die Antwort :) –

1

Können Sie versuchen es:

from django.db.models import Count 

Question.objects.annotate(cnt_f=Count('followers')).order_by('user', '-cnt_f')[:3] 

mehr Details in der doc

+0

Vielen Dank Sir :) Alles endlich geklappt! –