2016-10-26 6 views
1

ここはモデルの例です。Djangoフィルタークエリーセットは、多くのものか​​ら多くの追加フィールドモデルに基づいています。

class Person(models.Model): 
     name = models.CharField(max_length=128) 

     def __unicode__(self): 
      return self.name 

class Group(models.Model): 
     name = models.CharField(max_length=128) 

     def __unicode__(self): 
      return self.name 

class Membership(models.Model): 
     person = models.ForeignKey(Person) 
     group = models.ForeignKey(Group) 

は、私はすべてのPersonオブジェクトを取得したい、と人は少なくとも一つのグループのメンバーである場合は真の値列「IS_MEMBER」を追加し、それぞれに。

私は注釈を付けて数えますが、少し混乱しています...ありがとうございます。

答えて

0

次はあなたのために働く必要があります:あなたはこのことについてもっと知りたい場合は、conditional-expressionsはuのを助けることができる

Person.objects.annotate(
    is_member=Case(
     When(membership=True, then=True), default=False, output_field=BooleanField() 
     ) 
    ).distinct('id') 

persons = [] 
for p in Person.objects.all(): 
    if p.membership_set.all(): 
     p.is_member = True 
    else: 
     p.is_member = False 
    persons.append(p) 
1

はこれを試してみてください。

+0

これは非常に興味深いです、ありがとうございます。しかし、私はなぜis_memberが常に偽であるのか理解していません。(私はテーブルにデータを持っています) – user1518217

+0

それはmembership__person = Trueで動作します。 – user1518217

+0

ああ、素敵です、私はPerson.objects.annotateの結果を表示しますqty_membership = Count( 'membership)hauhahuでもOKです。 –

関連する問題