2011-07-13 41 views
2

我有這個型號:Django的查詢集排序由_set

class Person(models.Model): 
    name = models.CharField() 
    likes = models.ManyToManyField(Image) 

class Image(models.Model): 
    name = ... 
    image = ... 

如果我使用[x.person_set.count() for x in Image.objects.all()]我得到多少人喜歡每一個形象。

現在我需要訂購清單。我想要類似Image.objects.all().order_by('person_set.count()')

我需要獲得所有圖像的列表,按照人們喜歡它的順序排列。

我該怎麼辦?

回答

1

這可以在一個查詢中完成您想要的任何事情(喜歡的數量和按次數排序)。

from django.db.models import Count 
Image.objects.annotate(Count("person")).order_by("person__count") 
+0

謝謝老兄!只有一個問題:'人'是每個圖像的一個字段,因爲我在圖像中聲明瞭一個ManyToManyField到Person? –

+0

你明白了。我原本以爲這應該是person_set,但是在玩弄自己的模型後,我發現了它。 –