2012-08-23 8 views
7

ManyToMany関係に2つのモデル(EventとUserProfile)があります。私は、特定の数のユーザーが関連付けられていないイベントだけを選択したいと考えています。今のところ4人以下の人がサインアップしたイベントを選ぶべきです。 views.pyでManyToManyオブジェクトの数によるDjangoクエリフィルタ

私はこのような何かを持っているが、それは動作していない:私は正しくないと思うよ

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) 

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

models.py表情の関連する部分を同様に各イベントのすべてのUserprofilesでフィルタリングしていますが、どのように行うのか分かりません。

お手伝いできますか?

+0

ORMを使用してアノテーションやアグリゲーションを調べるには、ドキュメントまたはGoogleをご覧ください。 – Jingo

+0

私はしました。より具体的なアドバイスを探しています。与えられた標準フィルタは、それらの集合ではなく、単一の関連するモデルオブジェクトの特定の属性に従ってフィルタリングするように見える。私はもう少し秘密に思える情報を探していると思います。 – KindOfGuy

+0

下の祐治のアドバイスを見て、あなたはあなたが言ったことを見ていないことに気付きました。助けてくれてありがとう! – KindOfGuy

答えて

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

素晴らしい!もちろん、 'django.db.models import Count'をmodels.pyに追加しなければなりませんでしたが、これはうまくいきました。裕司、あなたは非常に強く重要な市民です。 – KindOfGuy

関連する問題