2012-08-23 96 views
7

我有兩個模型(Event和UserProfile)以ManyToMany關係。我只想選擇那些與其關聯的用戶少於一定數量的事件。因此,應該選擇至少有4人已經註冊的活動。Django根據ManyToMany對象的數量進行查詢篩選

在views.py我有這樣的事情,但它不工作:

proposed_event_list = Event.objects.all().filter(userprofile__lt=4) 

models.py樣子的相關部分:

class Event(models.Model): 
    name = models.CharField(max_length=100) 
    date = models.DateTimeField('Event date') 

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    event_commitments = models.ManyToManyField(Event, null=True, blank=True) 

我想我沒有正確用每個事件的所有Userprofiles過濾,但我不知道該怎麼做。

你能幫忙嗎?

+0

請看看文檔或谷歌的ORM的annotations和聚合,應該讓你開始。 – Jingo

+0

我已經完成了。我正在尋找更具體的建議。給定的標準過濾器似乎根據單個相關模型對象的特定屬性進行過濾,而不是一組對象。我想我正在尋找似乎更加深奧一些的信息。 – KindOfGuy

+0

Uha,看着Yuji的建議,我意識到我沒有看到你說的話。感謝您的建議! – KindOfGuy

回答

11
Event.objects.annotate(c=Count('userprofile')).filter(c__lt=4) 
+0

棒極了!當然,我不得不將'from django.db.models import Count'添加到models.py,但這已經奏效。 Yuji,你是一個非常強大和重要的公民。 – KindOfGuy

相關問題