2012-03-10 4 views
1

私は、ユーザがさまざまなリストを購読しているところにアプリを持っています。 ドメインは、List model/SubscriberModel/ListSubscriptionモデルです。このコードは、私はすべての加入者を取得することができますがDjango:filter ManyToMany join

Listクラスの定義は次の行

subscribers = models.ManyToManyField(Subscriber, through='ListSubscription') 

が含まれている、私はそれらのいくつかを必要とします。そのトリックは、ListSubscription クラスに、アクティブまたは非アクティブのサブスクリプションを識別する "is_active"ブールフィールドが含まれていることです。 "is_active = True"を多対多に追加するための解決策がいくつかありますか? プレーンSQLでは、この条件をジョイン句に追加しますが、Django ORMの方法についてはわかりません。ここ

理想的な結果は、それぞれの*アクティブ」の加入者と、すべてのリストを取得するクエリセットを持っている能力だろう。

答えて

1

ManyToManyフィールドがすでにクエリセットですので、あなたがアクティブな加入者をしたい場合はあなただけのを呼び出すことができます恐らくListクラスのメソッドを介してfilter方法、throughテーブルがターゲットテーブルと同様に、フィルタリングのために利用可能である:。

class List(models.Model): 
    # ... etc ... 
    @property 
    def active_subscribers(self): 
     return self.subscribers.filter(listsubscription__is_active = True) 

このクエリを使用して、少なくとも1人の活性加入者のリストを返すために:

List.objects.filter(listsubscription__is_active = True)