2013-01-01 114 views
0

鑑於我的應用程序的模型有些簡化的表示,我的問題是如何在全球範圍內找到最受歡迎的MyModel?即,那些MyModel s最受MyUser s的青睞。Django確定「最受歡迎」

我遇到類似的博客文章關於如何找到最喜歡的標籤,但我不認爲那些適用於這種特殊的情況。

class MyUser(models.Model): 
    favorite_models = models.ManyToManyField(MyModel) 
    ... 


class MyModel(models.Model): 
    name = models.CharField(...) 
    ... 

這可以在單個查詢中完成嗎?或者我需要循環每個MyUserMyModel以確定最流行的?提前致謝!

+0

你一定能夠做到這一點在查詢時,就像使用SQL ..我不不要忘記確切的語法,雖然.. – redShadow

回答

1

我懶得從頭創建一個Django項目,但是這一次應該做的工作:

from django.db.models import Count 
MyModel.objects.annotate(Count('myuser')) 

(或本)

MyModel.objects.annotate(Count('myuser_set')) 

如果沒有,試試這個:

class MyUser(models.Model): 
    favorite_models = models.ManyToManyField(MyModel, related_name='myuser') 

然後

MyModel.objects.annotate(Count('myuser_set')) 

(讓我知道如果它的工作原理,在任何情況下,這個頁面應該包含你需要做什麼:https://docs.djangoproject.com/en/dev/topics/db/aggregation/

+0

非常感謝。這似乎是一個竅門。 –